#includeint main() { //一维数组 int a[] = { 1,2,3,4 }; printf("%dn", sizeof(a)); printf("%dn", sizeof(a + 0)); printf("%dn", sizeof(*a)); printf("%dn", sizeof(a + 1)); printf("%dn", sizeof(a[1])); printf("%dn", sizeof(&a)); printf("%dn", sizeof(*&a)); printf("%dn", sizeof(&a + 1)); printf("%dn", sizeof(&a[0])); printf("%dn", sizeof(&a[0] + 1)); return 0; }
二、字符数组 1、解析:一维数组的数组名表示数组的首元素地址,但有两个例外:
sizeof(数组名),数组名时表示整个数组,计算的是整个数组的大小。&+数组名,取出的是整个数组的地址。
sizeof是操作符 ,计算的是对象所占内存的大小——单位是字节
#includeint main() { char arr[] = { 'a','b','c','d','e','f' }; printf("%dn", sizeof(arr)); printf("%dn", sizeof(arr + 0)); printf("%dn", sizeof(*arr)); printf("%dn", sizeof(arr[1])); printf("%dn", sizeof(&arr)); printf("%dn", sizeof(&arr + 1)); printf("%dn", sizeof(&arr[0] + 1)); printf("%dn", strlen(arr)); printf("%dn", strlen(arr + 0)); printf("%dn", strlen(*arr)); printf("%dn", strlen(arr[1])); printf("%dn", strlen(&arr)); printf("%dn", strlen(&arr + 1)); printf("%dn", strlen(&arr[0] + 1)); return 0; }
2、解析:strlen 是一个库函数,其作用是求一个字符串的长度,从字符串的首地址开始,向后依次查找,直到找到 ' ' 停止,长度就是 ' ' 之前出现的字符个数。
sizeof是操作符 ,计算的是对象所占内存的大小——单位是字节
#includeint main() { char arr[] = "abcdef"; printf("%dn", sizeof(arr)); printf("%dn", sizeof(arr + 0)); printf("%dn", sizeof(*arr)); printf("%dn", sizeof(arr[1])); printf("%dn", sizeof(&arr)); printf("%dn", sizeof(&arr + 1)); printf("%dn", sizeof(&arr[0] + 1)); printf("%dn", strlen(arr)); printf("%dn", strlen(arr + 0)); printf("%dn", strlen(*arr)); printf("%dn", strlen(arr[1])); printf("%dn", strlen(&arr)); printf("%dn", strlen(&arr + 1)); printf("%dn", strlen(&arr[0] + 1)); return 0; }
3、解析:
#includeint main() { char* p = "abcdef"; printf("%dn", sizeof(p)); printf("%dn", sizeof(p + 1)); printf("%dn", sizeof(*p)); printf("%dn", sizeof(p[0])); printf("%dn", sizeof(&p)); printf("%dn", sizeof(&p + 1)); printf("%dn", sizeof(&p[0] + 1)); printf("%dn", strlen(p)); printf("%dn", strlen(p + 1)); printf("%dn", strlen(*p)); printf("%dn", strlen(p[0])); printf("%dn", strlen(&p)); printf("%dn", strlen(&p + 1)); printf("%dn", strlen(&p[0] + 1)); return 0; }
三、二维数组解析:
#includeint main() { //二维数组 int a[3][4] = { 0 }; printf("%dn", sizeof(a)); printf("%dn", sizeof(a[0][0])); printf("%dn", sizeof(a[0])); printf("%dn", sizeof(a[0] + 1)); printf("%dn", sizeof(*(a[0] + 1))); printf("%dn", sizeof(a + 1)); printf("%dn", sizeof(*(a + 1))); printf("%dn", sizeof(&a[0] + 1)); printf("%dn", sizeof(*(&a[0] + 1))); printf("%dn", sizeof(*a)); printf("%dn", sizeof(a[3])); return 0; }
解析:二维数组实质上是三个一维数组组成的



