数组经典

int a[5];

当我们定义上面这么一个数组时,编译器根据指定的元素个数和元素的类型分配确定大小(元素类型大小*元素个数)的一块内存,并把这块内存的名字命名为a.a[0],a[1]等为a的元素,并非元素的名字.数组的每一个元素都是没有名字的.

sizeof(a) 的值为sizeof(int ) *5 
sizeof(a[0]) 为sizeof(int)
sizeof(a[5]) 为4     为啥子??sizeof是关键定 不是函数  函数求值是在运行的时候,而关键字sizeof求值是在编译的时候.虽然不存在a[5]这个元素,但是这里并没有去真正访问a[5],而是仅仅根据数组元素的类型来确定其值.
sizeof(&a[0])  4
sizeof(&a)   4


int a[5] = {1,2,3,4,5};
int *ptr = (int *)(&a + 1);
printf("%d,%d",*(a+1),*(ptr-1));

结果为:2 5

 (int *)(&a + 1):
&a + 1是取数组a的首地址,该地址的值加上sizeof(a)的值,即&a + 5 * sizeof(int)

*(a + 1):a,&a的值是一样的,但意思不一样,a是数组元素的首地址,也就是a[0]的首地址,&a是数组的首地址,

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值