数组名和取数组名地址的区别

本文通过实例详细解析了数组和指针的关系,包括数组名作为指针常量的使用方式,以及如何理解&a+1这样的表达式含义。通过具体代码示例展示了不同情况下地址和大小的变化。
main()
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);

printf(“%d,%d”,*(a+1),*(ptr-1));
}



写出上面打印的结果。

*(a+1)大家都可以知道他的结果,就是Array的第二个成员的值,那&a+1代表什么呢!

int nData[2] = { 1,2 };
printf("nData = %p\n",nData);     // 1
printf("nData = %p\n",&nData);    // 2
printf("nData = %p\n",nData+1);   // 3
printf("nData = %p\n",&nData+1);  // 4
printf("%d\n",sizeof(nData));     // 5
printf("%d\n",sizeof(&nData));    // 6

 

输出的结果:

nData = 0012FF34

nData = 0012FF34

nData = 0012FF38

nData = 0012FF3C

8

4

可以看到1和2的结果是一样的,3比4大正好一个int空间。

        前两天不是刚写关于数组和指针的区别,在使用数组表达式时,数组名的值是一个指针常量,指向数组的第一个成员。他的类型取决于数组元素的类型,本例中数组名称就是指向int的指针常量。因此就会出现1和3相差一个int的情况就是4字节。那为什么3和4也相差4个字节呢。这是就是&nData的意义。

        在此之前先要了解1和2的区别,他们显示的结果都一样,但是取值的方式不一样。那就要说一种特殊情况:即当sizeof(nData)和&nData时,nData不能作为指针常量来表示,sizeof返回的是数组的长度,而&nData表示一个指向数组的指针,显示的地址是第一元素的,他的大小就是数组的大小,程序6所显示的结果。&nData+1代表的意思就是在nData的地址上+sizeof(nData)+1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值