C++ 数组与指针

C++中既然数组名就是指针,那么inta[10];int*b=a;sizeof(a)的结果为什么是整个数组的占用空间而sizeof(b)的结果却是指针的占用空间?... C++中既然数组名就是指针,那么
int a[10];
int *b=a;
sizeof(a)的结果为什么是整个数组的占用空间而sizeof(b)的结果却是指针的占用空间?
展开
 我来答
cumthemu
2010-09-14 · TA获得超过4504个赞
知道小有建树答主
回答量:628
采纳率:0%
帮助的人:569万
展开全部
int a[10];
这里限定长度为10个整数,所以长度为10*sizeof(int) = 40。

int *b=a;
由于b是指针,无论是否指向a,指向什么,sizeof(b)等于sizeof(int),32位平台上等于4。

以上讨论的问题引发的关于数组名称的问题:
数组名本身是个地址常量,但是某些特殊情况下它的语义可以发生改变。例如sizeof(a),这时a表示整个数组对象(这里指语法对象,不是指类的实例)而不是这个常量本身。基于这个语义,对数组名取地址也是合法的,对于数组a来说&a的结果等于a这个地址常量本身的值。这是C/C++标准委员会为了维护语法对象a作为一个左值(l-value)总可以取地址这条原则的妥协。
军军106
2010-09-14 · TA获得超过453个赞
知道小有建树答主
回答量:1747
采纳率:0%
帮助的人:765万
展开全部
数组名是数组首地址,本身不是变量。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
丨呜呼哀哉
2010-09-14 · TA获得超过285个赞
知道小有建树答主
回答量:145
采纳率:0%
帮助的人:175万
展开全部
数组和指针的概念不一样。
定义一个数组,内存就会给他分配指定的空间;
定义一个指针,内存只会分配一个存放该指针的空间,也就是说指针没有大小,有的只是存放自己的位置,该位置大小和类型有关:int char等等。

你的例子中也说明了这一点,sizeof(a)肯定就是数组的大小,因为它“申请”了10个,那内存就分给它10个;指针只是定义而已,没有要求大小,内存也不知道该给它分配多少,所以就没分配。指针指向的却是一个地址,也就是a的地址,当调用该指针时,其实就相当于调用该指针指向的地址……

sizeof(b)所以只是int的大小
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
溟雨潇潇
2010-09-14
知道答主
回答量:7
采纳率:0%
帮助的人:1.2万
展开全部
Because you can imagine that if b refers to a,then it just links to the first term of a.....For instance,if a[10],then if *b=a,then b refers to a[1]...so sizeof(b) is just the byte of b.

If you are content with my answer ,please give me the score....Thanks
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式