首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于数组的一个大有关问题.

2012-03-30 
关于数组的一个大问题...charabc[10]都说abc就是一个指针?果真如此?coutsizeof(abc)endl输出结果为1

关于数组的一个大问题...
char abc[10];


都说abc就是一个指针?果真如此?


cout<<sizeof(abc)<<endl; 输出结果为10,若abc真是一个指针,输出结果是不是应该等于4呢?
cout<<hex<<(int)abc<<endl; 输出结果为一个地址
cout<<hex<<&abc<<endl; 输出结果为一个地址
而且经多次重复验证,(int)abc与&abc是一样的

abc到底是一个什么类型的量?




[解决办法]
abc是一个特殊的指针,他具有指针的特性(是一个地址,可以进行指针的运算)
但是他又有一些指针不具有的性质: sizeof运算

(int)abc的意义是 把地址abc转为int型。
&abc的运算结果也是abc的地址

所以两个结果一致。

在有些特殊的场合,数组和指针的表现会完全一致,比如数组做为参数传给函数的时候。
[解决办法]
abc是字符数组。看看下面苏瑞波的经典材料:
http://topic.csdn.net/u/20091123/11/0c03d2e2-0655-4634-8287-0e2315d889fc.html?36628
[解决办法]
楼主去买本《C和指针》认真补课吧。
[解决办法]
如楼主所说,abc确实是指向一个拥有10个字节空间的内存地址。
还有楼主要弄明白sizeof的功能,它实际上是计算被分配的内存空间的大小,所以为10。
在32位的系统下,一个内存地址需要4个字节来表示,既然abc是一个内存地址,(int)的作用只是将该地址转换为整形的,必然不会改变。
至于&abc,我感觉就是abc,也即&abc[0]。
如有理解错误之处,还望批评指正!
[解决办法]
http://blog.csdn.net/supermegaboy/archive/2009/11/23/4855027.aspx推荐一个人的博客让你看看
[解决办法]
首先弄懂数组存储机制。假设a[10]开辟一个名为0000为首地址的一组空间,a[0]就存在0000这个地址下,按照数组的类型,int占几字节,char占几字节,比如int占2字节,那a[0]就是以0000为首地址,0001为尾地址,a[1]存在0002地址下,以0002为首地址,0003为尾地址。 也就是说a这个数组是指向这一连串地址的,而且是首地址。所以LZ所说的abc指向的就是你开辟的空间的首地址。
[解决办法]
abc是char[10]类型。。
只不过可以隐式转换成char *,不能说abc是一个指针。
[解决办法]
cout<<sizeof(abc)<<endl;
这句话你的理解似乎不对吧
这样的话,abc会是一个数组名的身份,所以是结果10
[解决办法]

探讨

如楼主所说,abc确实是指向一个拥有10个字节空间的内存地址。
还有楼主要弄明白sizeof的功能,它实际上是计算被分配的内存空间的大小,所以为10。
在32位的系统下,一个内存地址需要4个字节来表示,既然abc是一个内存地址,(int)的作用只是将该地址转换为整形的,必然不会改变。
至于&amp;abc,我感觉就是abc,也即&amp;abc[0]。
如有理解错误之处,还望批评指正!
……

[解决办法]
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!

[解决办法]
C/C++ code
char abc[10];//(1)abc 不是变量,而是一个常量(因为它的值是不可变的) abc = (char*)0 //error,因为abc是常量//(2)abc 的类型为 char [10](一个长度为10的char数组)char (*lpArry)[10] = &abc;assert((char*)abc == &abc[0]);assert(sizeof(abc) == 10 * sizeof(char));
[解决办法]
char abc[10];
数组名不是指针,abc的类型是有10 int元素的的数组。
数组名用于表达式或做函数参数时会被转化为指向第一个元素的指针。
但是有几个例外:如用于sizeof和&,sizeof返回数组占用的字节数。
&abc的类型是指向一维数组的指针。
[解决办法]
abc是指针,这里的abc是一个char[]类型,而不是char*;


char[]和 char*都是指针类型...
[解决办法]
探讨

VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!

[解决办法]
C专家编程 这本书关于数组指针的异同点讲得非常清楚。。。


[解决办法]
abc是一个数组名,在有些地方可以起到指针的作用

热点排行