我们常用的 sizeof 不是函数,它是以字节为单位来计算不同类型的变量或数组大小的操作符; strlen 是函数,他的参数是 char * 类型的指针,它以 ‘\0’为结束标志求取 char * 类型的指针指向的对象到 ‘\0’ 之间元素所占的字节数。理解这些题目分析清楚“()“里面的内容代表的含义是关键。当我们理解二维数组时大胆的将它理解成一维数组 例如二维数组:int = a[3][4] = {0};可理解为 int a[] = {a[0],a[1],a[2]};只是这里一维数组的每个元素占 16 个字节,其他的完全可以按一维数组的理解方式去理解。这里我们不得不说说数组和指针的关系,虽然在某些情况下使用很类似,但他们二者的关系是没有关系,哈哈哈。以下题目的用算结果已做了验证。
//一维数组
int a[] = {1,2,3,4};
printf("%d\n",sizeof(a)); //16
printf("%d\n",sizeof(a+0)); //4
printf("%d\n",sizeof(*a)); //4
printf("%d\n",sizeof(a+1)); //4
printf("%d\n",sizeof(a[1])); //4
printf("%d\n",sizeof(&a)); //4
printf("%d\n",sizeof(&a+1)); //4
printf("%d\n",sizeof(&a[0])); //4
printf("%d\n",sizeof(&a[0]+1));//4
//字符数组
char arr[] = {'a','b','c','d','e','f'};
printf("%d\n",sizeof(arr)); //6
printf("%d\n",sizeof(arr+0)); //4
printf("%d\n",sizeof(*arr)); //1
printf("%d\n",sizeof(arr[1])); //1
printf("%d\n",sizeof(&arr)); //4
printf("%d\n",sizeof(&arr+1)); //4
printf("%d\n",sizeof(&arr[0]+1));//4
printf("%d\n",strlen(arr)); //随机数 假设19
printf("%d\n",strlen(arr+0)); //19
printf("%d\n",strlen(*arr)); //error
printf("%d\n",strlen(arr[1])); //error
printf("%d\n",strlen(&arr)); //19
printf("%d\n",strlen(&arr+1)); //13
printf("%d\n",strlen(&arr[0]+1));//18
char *p = "abcdef";
printf("%d\n",sizeof(p)); //4
printf("%d\n",sizeof(p+1)); //4
printf("%d\n",sizeof(*p)); //1
printf("%d\n",sizeof(p[0])); //1
printf("%d\n",sizeof(&p)); //4
printf("%d\n",sizeof(&p+1)); //4
printf("%d\n",sizeof(&p[0]+1));//4
printf("%d\n",strlen(p)); //6
printf("%d\n",strlen(p+1)); //5
printf("%d\n",strlen(*p)); //error
printf("%d\n",strlen(p[0])); //error
printf("%d\n",strlen(&p)); //随机数
printf("%d\n",strlen(&p+1)); //随机数
printf("%d\n",strlen(&p[0]+1));//5
//二维数组
int a[3][4] = {0}; //a[3][4] = {a[0],a[1],a[2]};
printf("%d\n",sizeof(a)); //48
printf("%d\n",sizeof(a+1)); //4
printf("%d\n",sizeof(a[0][0]));//4
printf("%d\n",sizeof(a[0])); //16
printf("%d\n",sizeof(&a[0]+1));//4
printf("%d\n",sizeof(*a)); //16
printf("%d\n",sizeof(a[3])); //16
注:只有两种情况下数组名代表整个数组:(1) sizeof(数组名),这里的数组名代表整个数组 (2) &数组名,这里的数组名代表整个数组。