数组名a与&a的区别

对于一个数组  int a[5];  a表示数组首元素的地址,而&a表示数组的首地址。

 

假设 &a[0]的地址为0x00ffff00;则&a[4]的地址为0x00ffff12; 那么&a+1 的地址为数组的首地址加上该数组的偏移量sizeof(a)(20),a+1 则是数组首元素的地址加上该数组一个元素的偏移量sizeof(a[0])(4)。

 

上面的都应该明白了吧,下面请看

#include "stdafx.h"

int main(int argc, char* argv[])
{
 char a[5]={'A','B','C','D','E'};
 char (*p1)[5]=&a;
 char (*p2)[5]=a;

 return 0;
}

这个你怎样理解?那个是正确的?

(*p)[5]表示p是一个指向含有5个元素的指针变量。

对于char (*p1)[5]=&a; 是把&a的地址赋给指针变量p1(p1是有内存的,它里面保存了指向数组的地址),这里类型相同(都是含有5个元素的数组首地址),若此句改为char (*p1)[3]=&a; 或者char (*p1)[10]=&a; 都会报错,因为所包含的严肃个数不同,我认为即 字节数不同,只有包含的元素相同才能赋值操作,当然这要是在指向内存里存的值得类型一样的前提下。

从上面的分析自然就知道char (*p2)[5]=a;这句是错的了,一个是  char  *[5] 一个是 char [5]。(a是sizeof(a)空间的名字)

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值