Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9146
  • 博文数量: 2
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 30
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-01 16:08
文章分类

全部博文(2)

文章存档

2013年(2)

我的朋友
最近访客

分类: C/C++

2013-08-05 15:05:20

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

 

 

阅读(568) | 评论(0) | 转发(0) |
0

上一篇:变量与变量地址

下一篇:没有了

给主人留下些什么吧!~~