例题一:求arr数组的大小,单位为字节。
int main() {
char arr[] = "abcdef";
printf("%d\n", sizeof(arr));
printf("%d\n", sizeof(arr + 0));
printf("%d\n", sizeof(*arr));
printf("%d\n", sizeof(arr[1]));
printf("%d\n", sizeof(&arr));
printf("%d\n", sizeof(&arr + 1));
printf("%d\n", sizeof(&arr[0] + 1));
return 0;
}
计算长度,不能是整型,只能是地址!!!
int main() {
char arr[] = "abcdef";
printf("%d\n", strlen(arr));
printf("%d\n", strlen(arr + 0));
printf("%d\n", strlen(*arr));
printf("%d\n", strlen(arr[1]));
printf("%d\n", strlen(&arr));
printf("%d\n", strlen(&arr + 1));
printf("%d\n", strlen(&arr[0] + 1));
return 0;
}
输出结果:
答案解析:
注意,char p="abcdef",只是把a的地址存放到p中,因为p是char 类型,存放不下“abcdef".但是我们的p通过a就能找到abcdef\0.
int main() {
char *p = "abcdef";
printf("%d\n", sizeof(p));
printf("%d\n", sizeof(p+1));
printf("%d\n", sizeof(*p));
printf("%d\n", sizeof(p[0]));
printf("%d\n", sizeof(&p));
printf("%d\n", sizeof(&p+1));
printf("%d\n", sizeof(&p[0]+1));
return 0;
}
输出结果:
答案解析:
int main() {
int a[3][4] = { 0 };
printf("%d\n", sizeof(a));
printf("%d\n",sizeof(a[0][0]));
printf("%d\n", sizeof(a[0]));
printf("%d\n", sizeof(a[0]+1));
printf("%d\n", sizeof(*(a[0]+1)));
printf("%d\n", sizeof(a+1));
printf("%d\n", sizeof(*(a+1)));
printf("%d\n", sizeof(&a[0]+1));
printf("%d\n", sizeof(*(&a[0]+1)));
printf("%d\n", sizeof(*a));
printf("%d\n", sizeof(a[3]));
}
输出结果:
答案解析:
原文:https://blog.51cto.com/u_15100290/2701486