| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 724 人关注过本帖
标题:一个关于指针数组的问题,弄不懂。
只看楼主 加入收藏
woai_kmust
Rank: 2
等 级:论坛游民
帖 子:29
专家分:41
注 册:2011-8-31
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:16 
一个关于指针数组的问题,弄不懂。
#include "stdio.h"
main()
{char *p[3]={{"000"},{"000"},{"000"}};
printf("%x\n %x\n %x\n",p,p[1],p[2]);
}

在Vc++6.0 上输出
42002c
 42002c
 42002c
在wint-c 上输出
19a
 19a
 19a


我的理解是,p[0],p[1],p[2]分别指向不同的地址,他们虽然指向的字符数组的内容相同,但显示为何是p[0].p[1].p[2]呢,难道不分别为三个{"000"}开辟不同的内存空间吗?
搜索更多相关主题的帖子: include 
2011-08-31 22:10
woai_kmust
Rank: 2
等 级:论坛游民
帖 子:29
专家分:41
注 册:2011-8-31
收藏
得分:0 
描述错了,我草,那句话是,为何是p[0].p[1].p[2]相等呢。
2011-08-31 22:17
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:0 
貌似没有开辟不同空间
用char *p[3]={"123","456","789"};
0x8048500
 0x8048504
 0x8048508
用char *p[3]={"000","000","000"};
0x8048500
 0x8048500
 0x8048500
如果声明了3个指向相同内容的指针,结果编译器指到一个地方去了。


[ 本帖最后由 pauljames 于 2011-8-31 22:23 编辑 ]

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2011-08-31 22:20
woai_kmust
Rank: 2
等 级:论坛游民
帖 子:29
专家分:41
注 册:2011-8-31
收藏
得分:0 
回复 3楼 pauljames
这怎么这么牛啊
2011-08-31 22:30
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:0 
应该是:这编译器怎么这么牛啊

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2011-08-31 22:32
penghao511
Rank: 2
来 自:安徽
等 级:论坛游民
帖 子:23
专家分:25
注 册:2011-9-1
收藏
得分:0 
回复 3楼 pauljames
你说的我不是很懂。可不可以说白点?
2011-09-01 16:46
晓云林
Rank: 2
等 级:论坛游民
帖 子:46
专家分:35
注 册:2011-8-29
收藏
得分:0 
原来是这样分配的啊
我的编译器  p 和p[0]的指向不同

[ 本帖最后由 晓云林 于 2011-9-1 17:51 编辑 ]
2011-09-01 17:50
爱德华
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:183
专家分:536
注 册:2011-5-29
收藏
得分:0 
楼主貌似写错源程序了
#include "stdio.h"
main()
{char *p[3]={{"000"},{"000"},{"000"}};
printf("%x\n %x\n %x\n",*p,*p[1],*p[2]);
}

算法,数据结构,windows核心编程.
2011-09-01 18:57
qq8801103
Rank: 5Rank: 5
来 自:苏州中科大软件学院
等 级:职业侠客
威 望:1
帖 子:422
专家分:340
注 册:2009-10-8
收藏
得分:0 
程序代码:
#include "stdio.h"
int main()
{
char *p[3]={{"000"},{"000"},{"000"}};
printf("%x\n%x\n%x\n",**p,*p[1],*p[2]);
}

这样也可以的

Discuz!  
好好学习  天天向上
2011-09-01 19:35
woai_kmust
Rank: 2
等 级:论坛游民
帖 子:29
专家分:41
注 册:2011-8-31
收藏
得分:0 
回复 9楼 qq8801103
试了,输出的都是p[0],p[1],p[2]所指向的首个字符'c'的asc码啊。
我想问的是,尽管p[0],p[1],p2]所指向的字符串相同,但是不分别为这些字符串申请相应的内存地址吗?
2011-09-01 21:51
快速回复:一个关于指针数组的问题,弄不懂。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019252 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved