C语言数组与指针 一维数组

首先我们需要了解sizeof操作符,数组名的规则:

sizeof是啥?

sizeof是操作符,用来计算变量所占内存空间大小的,单位是字节;

如果操作符是类型的话,计算的是使用类型创建的变量所占内存空间的大小。

数组名的规则:

1.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小;

2.&数组名,这里的数组名表示整个数组,取出的是整个数组的地址;

3.除此之外所有的数组名都表示首元素的地址。

例一:

int main() { int a[] = { 1,2,3,4 }; printf("%zu\n", sizeof(a)); printf("%zu\n", sizeof(a + 0)); printf("%zu\n", sizeof(*a)); printf("%zu\n", sizeof(a + 1)); printf("%zu\n", sizeof(a[1])); printf("%zu\n", sizeof(&a)); printf("%zu\n", sizeof(*&a)); printf("%zu\n", sizeof(&a + 1)); printf("%zu\n", sizeof(&a[0])); printf("%zu\n", sizeof(&a[0] + 1)); return 0; }

代码运行结果:

解说:

int main() { int a[] = { 1,2,3,4 };//数组总大小:4*4 = 16 printf("%zu\n", sizeof(a));//16 printf("%zu\n", sizeof(a + 0));//4/8,a+0是首元素地址 printf("%zu\n", sizeof(*a));//4,*a == a[0]; printf("%zu\n", sizeof(a + 1));//4/8 printf("%zu\n", sizeof(a[1]));//4 printf("%zu\n", sizeof(&a));//4/8,&a是整个数组的地址,依然是地址 printf("%zu\n", sizeof(*&a));//16 //&a == int (*)[]; //*&a == a //sizeof(*&a) == sizeof(a); printf("%zu\n", sizeof(&a + 1));//4/8 &a + 1还是地址 printf("%zu\n", sizeof(&a[0]));//4/8 printf("%zu\n", sizeof(&a[0] + 1));//4/8 return 0; }