数组名a与&a的区别

来源:互联网 发布:但做的软件程序员 编辑:程序博客网 时间:2024/05/16 18:32

对于一个数组  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)空间的名字)

 

 

 

 

 

原创粉丝点击