一个C数组的小细节

#include <stdio.h>
int main() {
    int a;
    int b[10] ;
    printf(" b:%d\n b+1:%d\n &b:%d\n &b+1:%d \n", b, b+1, &b, &b+1);
    printf("sizeof(b):%d \n", sizeof(b));
    printf("sizeof(a):%d \n ", sizeof(a));
}

运行结果如下:

b:6422000:数组首元素的地址

b+1:6422004:数组元素+1的地址,一个元素4个字节,所以是6422004

我们来验证一下这个结论:

int b[10] ={1,2,3,4,5,6,7,8,9,10};
printf(" b+1:%d\n",*(b+1));
printf(" b+1:%d\n",*(b+2));
printf(" b+1:%d\n",*(b+3));

和我们分析的是一致的。

&b:6422000:整个数组的地址

&b+1:6422040:数组地址+数组预分配内存空间

sizeof(b):40:c编译器分配40个字节的内存
sizeof(a):4:c编译器分配4个字节的内存

数据类型的本质:固定大小内存块的别名

int main()
{
    int a = 10;
    int b[10] ;
    printf("int a:%d \n", sizeof(a));
    printf("int a:%d \n", sizeof(int *));
    printf("int b:%d \n", sizeof(b));
    printf("int b:%d \n", sizeof(b[0]));
    printf("int b:%d \n", sizeof(*b));
    printf("hello.....\n");
    getchar();
    return 0;
}

为什么int是4 而int *是8?

指针几个字节跟语言无关,而是跟系统的寻址能力有关,譬如以前是16为地址,指针即为2个字节,现在一般是32位系统,所以是4个字节,以后64位,则就为8个字节。

posted @ 2020-02-10 14:06  风暴松鼠  阅读(82)  评论(0)    收藏  举报