c程序里有关指针数组和数组名的问题

c程序设计语言,p101,关于指针数组的问题
[问题点数:40分]
c程序设计语言,p101,关于指针数组的问题
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2013年6月 Linux/Unix社区大版内专家分月排行榜第二2013年5月 Linux/Unix社区大版内专家分月排行榜第二2013年3月 Linux/Unix社区大版内专家分月排行榜第二2013年1月 Linux/Unix社区大版内专家分月排行榜第二2012年12月 Linux/Unix社区大版内专家分月排行榜第二2012年8月 Linux/Unix社区大版内专家分月排行榜第二2011年12月 Linux/Unix社区大版内专家分月排行榜第二2011年10月 C/C++大版内专家分月排行榜第二2011年10月 Linux/Unix社区大版内专家分月排行榜第二
2012年6月 C/C++大版内专家分月排行榜第三2012年6月 PHP大版内专家分月排行榜第三2012年5月 C/C++大版内专家分月排行榜第三2012年3月 Linux/Unix社区大版内专家分月排行榜第三2012年2月 Linux/Unix社区大版内专家分月排行榜第三2011年11月 C/C++大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
分编译器的,这个结果应该是不确定的.
等 级:论坛游民
帖 子:292
专家分:10
这样啊,哈哈,还真麻烦啊!谢谢!
等 级:论坛游民
帖 子:61
专家分:23
指针指向数组首地址..可以用指针数组表示出来.
来 自:苏州中科大软件学院
等 级:职业侠客
帖 子:422
专家分:340
建立无返回值void 你试一下
好好学习&&天天向上
等 级:新手上路
一般来说,函数建立的局部变量数组是放在函数调用栈中的,函数调用完之后栈被摧毁,局部变量和数组也应该消失。
但是有的编译器的实现,将完全初始化了的数组存放在了数据区而不是在栈上,因此那个数组存在是可能的。
一般来说,C语言在4G的虚拟空间中建立这样的数据存放结构:
&&&&&&&&&&&栈
&&&&&&&&&&&堆
&&&&&&&&&&&未初始化数据段(BSS段)
&&&&&&&&&&&数据段(貌似可以修改,存放全局变量之类的)
&&&&&&&&&&&只读数据段(存放字符串等等,不可修改)
&&&&&&&&&&&代码段(存放函数也就是方法代码咯)
根据楼主的演示结果,那个数组很可能放在数据段中。因此指针还能访问到正确的数据。不然理论上是不可能的,tain栈被摧毁后立即被printf函数栈占据,因此一般不会得到正确的结果。
等 级:职业侠客
帖 子:208
专家分:346
因为你的局部变量是存储在栈中的,函数结束返回的时候,栈顶会下移,在x86的表现是ebp和esp被回复成调用前的值,而对调用函数之前在栈中的内存内容并不做修改,这时你从函数中返回的指针指向的内存没有任何变化,所以你直接访问的时候还会得到那个值(这里很可能是prinft使用栈是没有增长到a[1]指向的地址),如果你在函数返回后立即调用另一个函数,那么该指针地址指向的地方可能被改变,这是该位置的值就未定了。
#include&stdio.h&
int * tain()
&&& int x[2]={1,2};
&&& //a=x;
int * tain1()
&&& int x[2]={1,3};
&&& //a=x;
&&& int *a;
&&& a=tain();
&&& tain1();
&&& printf(&%d&,a[1]);
这是输入的应该不会是2了,应该会是3
[ 本帖最后由 zhddragon 于
21:40 编辑 ]
身体是玩命的本钱
来 自:苏州中科大软件学院
等 级:职业侠客
帖 子:422
专家分:340
7楼的应该很全面
好好学习&&天天向上
版权所有,并保留所有权利。
Powered by , Processed in 0.028719 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reserved* 网友发言均非本站立场,本站不在评论栏推荐任何网店、经销商,谨防上当受骗!
Win8系统突破性地增加了全新界面、内置Windows Store、支持ARM架构等诸多全新设计。
手机整机DIY企业级
pc软件手机软件关于c语言字符型指针数组的问题_c语言吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:269,285贴子:
关于c语言字符型指针数组的问题收藏
如定义 char *pa[3]={"a","bb","ccc"};那么pa[2]和*pa[2]分别指什么,有什么区别
pa[2] 是指 字符串数组中的第三个元素 也就是 ccc*pa[2] 是指 存储 字符串ccc 的首地址
普通数组的元素相当于一个普通变量char *pa[3]={"a","bb","ccc"};是指针数组 所以元素 p[2]
相当于一个指针变量*pa[2] 就是 这个指针指向的那个字符串的第一个字符
pa[2]是指针变量 它存储的是 地址
,字符串的首地址,即字符串第一个字符的地址*pa[2] 就是通过这个指针(地址) 间接应用 该地址 表示的内存此内存中 存放的便是
字符串的第一个字符
反了。。 *p[2]是指的里面的元素
p[2] 是 地址
#include&stdio.h&int main(){char *pa[3]={"a","bb","xyz"};printf("%s\n",pa[2]);printf("%c\n",*pa[2]);return 0;}输出为xyzxPress any key to continue
这是指针中比较难理解的一部分,要区别 char (*pa)[3] 与 char* pa[3] 的区别。
前者是指向数组的指针,而后者,是由指针构成的数组。里面的元素“a” "bb" "cc"其实是指向其本身的指针。
2D Fourier Transformation
登录百度帐号我的游戏推荐游戏
后查看最近玩过的游戏
为兴趣而生,贴吧更懂你。或C语言中二维数组名是不是可以看作指针数组名?_百度知道
C语言中二维数组名是不是可以看作指针数组名?
只不过,这个指针数组里的元素都是数组指针,可不可以这样理解?
提问者采纳
不可以,二维数组要看做“数组的数组”。(以如下定义为例:int&a[4];&int&*&p;)&给你个对于指针和数组的正确理解吧:定义的不同:C&里,指针和数组是不同的类型,不要把数组名看做“常指针”。所以沪龚高夹薨蝗胳伟供连&sizeof(a)&和&sizeof(p)&值是不同的。容易被混淆的原因:a.&都有基础类型。b.&数组(或者叫数组名)可以默认转化为指针,值为数组首地址。这就像&int&可以默认转化为&double&一样。操作:除声明外,中括号操作符仅用于指针,如&p[0],p[5]&等。当使用&a&时,要看做&(int*)a&。比如&a[0]&要看做&((int*)a)[0]&,&*a&要看成&*(int*)a&。(除&sizeof&以及类似操作以外)&所谓的“二维数组”,“二级指针”,“指针数组”,以及“数组指针”的理解应该为:基础类型为数组的数组,基础类型为指针的指针,基础类型为指针的数组,基础类型为数组的指针。&比如二维数组定义为&int&b[3][4];&,可以看做:typedef&int&A[4];A&b[3];其它类推。&不知道表述清楚了没,有疑问加评论吧。
提问者评价
谢谢你的耐心解答,好详细呀
其他类似问题
例如: 二维数组名是一个指针,但是说它是常量的意思是它本身不可更改:如你定义int a[34][3],a确实是个指针,*a指向数组中第一个整数;但是你不能通过a++操作使在此操作后a指向数组中第二个整数,而普通指针(int a[12];int *b=a;b 就是普通指针)可以这么操沪龚高夹薨蝗胳伟供连作的,所以说它是“指针常量”;
按默认排序
其他2条回答
二维数组的名称就是指针的指针, 对于一维数组,它的数组名,就是它存放内存的首地址
大同小异吧
指针数组的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 指针数组 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信