指针地址问题,请达人解释?

chenli_neo 2009-09-18 04:22:06
void main(void)
{
int nVar1=100,nVar2=200,nVar3=300;

int *Array[3];

Array[0]=&nVar1;
Array[1]=&nVar2;
Array[2]=&nVar3;

printf("%d\n",Array); 1
printf("%d\n",Array[0]); 2
printf("%d\n",*Array); 3
//printf("%d\n",*(++Array[1])); 4
//printf("%d\n",*(--Array[1])); 5


}


代码如上,其中打印出来的1 的内容是地址(整个数组的地址向下移动一个单元),而2的内容和3的内容一样(都是数组的初始地址,即第一个元素的起始地址),为什么3的内容不是100??;

另外,跟大家分享一下,栈的内存分配是自高位向地位分配的,所以4的内容是100,5的内容是300;
堆的分配是低地址向高地址分配;
...全文
109 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangxc2004 2009-09-18
  • 打赏
  • 举报
回复
指出一个小错误:
5的输出错了吧,应该是200
--(++Array[1]) == Array[1]
thy38 2009-09-18
  • 打赏
  • 举报
回复
同意,LZ粗心了
v风雪山神庙v 2009-09-18
  • 打赏
  • 举报
回复
int *Array[3]是一个指针数组,每个元素都是指针
我们知道,对指针进行解引用可得到指针指向的值。
数组名称Array即是指向数组第一个元素的指针

*Arrary的值是&nVar1,即指向nVar1的指针值,
再对这个指针解引用*(*Array)即可得到nVar1的值100.

不知我这么解释楼主明白了没有?
dish_bird123 2009-09-18
  • 打赏
  • 举报
回复
在下发表一点浅薄之见,
实际数组也是指针,如果没有说明指针的首地址,依次这样的理解,我想应该不会有什么问题!
nosxcy 2009-09-18
  • 打赏
  • 举报
回复
或者可以这样理解
int *Array[3];
等价于
int **Array;
mstlq 2009-09-18
  • 打赏
  • 举报
回复
*Array等价于Array [0]

想要100,用**Array

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧