// 64位机上测试,后面的注释就是输出结果和解释
#include <stdio.h>
#include<typeinfo> // typeid(a).name() C++的库,打印出数据类型
#define print_hex(a) printf(#a"\t%#x\n", (a) )
#define print_type(a) printf(#a" type is \t%s\n", typeid(a).name() )
int main()
{
int a[8];
int *p = a;
print_hex(a); // a 0xf140a310
print_hex(a+1); // a+1 0xf140a314
print_hex(&a); // &a 0xf140a310
print_hex(&a+1); // &a+1 0xf140a330 ->因为&a的类型是[指向(有8个int数据的数组)的指针],\
所以+1递增了sizeof(int (*)[8]) = sizeof(int)*8 = 32 = 0x20
print_type(a ); // a type is A8_i ->有8个int数据的数组
print_type(&a); // &a type is PA8_i ->指向(有8个int数据的数组)的指针
print_hex(p); // p 0xf140a310
print_hex(p+1); // p+1 0xf140a314
print_hex(&p); // &p 0xf140a308 ->这里倒是可以看出栈是从高地址(a的地址0xf140a310)往低地址生长
print_hex(&p+1); // &p+1 0xf140a310 ->&p=0xf140a308,类型PPi,\
所以&p+1=0xf140a308+1*(sizeof(int **)),和a的地址没有半毛钱关系,只是巧合
print_type(p ); // p type is Pi
print_type(&p); // &p type is PPi
return 0;
}
C语言对于数组的理解
猜你喜欢
转载自blog.csdn.net/gsp1004/article/details/126178095
今日推荐
周排行