为什么数组名取地址和数组名的取值一样

14 篇文章 0 订阅
int ints[20] = {10,20,30,40,50,60,70,80,90,100,
                110,120,130,140,150,160,170,180,190,200};
int *ip = ints + 3;
//假定ints数组在内存中的起始位置是100 , 整型值和指针的长度都是4个字节
表达式表达式
ints100ip112
ints[4]50ip[4]80
ints + 4116ip + 4128
*ints + 414*ip + 444
*(ints + 4)50*(ip + 4)80
ints[-2]非法ip[-2]20
&ints100&ip非法
&ints[4]116&ip[4]128
&ints + 4420&ip + 4非法
&ints[-2]非法&ip[-2]104
ints 和 &ints的值为什么一样

这两个看的角度不一样.

(1)ints是指针常量 , 即数组首元素ints[0]的地址 .

(2)&ints是整个ints[20]的首地址 , 是以整个数组为角度来看 , 虽然它与ints[0]的值相同 , 但是&ints+1就已经增加了20个int类型的字节的长度了.

注 : arr[1] === *( arr + (1) )
 
2[arr] 是合法的 , ==> *(2 + (arr) ) ==> *(arr +2)
 
brrr[3][10] , brr名字的值是一个指向它第一个元素的指针 , brr是指向一个包含10个元素的数组的指针
 
二维数组得到具体值需要解两次引用 , 第一次确定行 , 第二次确定值(列)
 
多维数组作为函数参数 :
 
void func(int (*mat)[10]);
void func(int mat[] [10])
mat的第一个下标根据包含10个元素的整型数组的长度进行调整 , 接着第二个下标根据整型的长度进行调整.
关键在于编辑器必须知道第二个以及后各维的长度才能对各下标进行求值 , 因此在原型中必须声明这些维的长度 ; 第一维的长度并不需要 , 因为在计算下标值时用不到它

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值