C语言中的数组名a在内存在分配存储单元吗?

在C语言中,若我定义一个数组a[10],我们都知道a的值就是a[0]的地址,那么请问a在内存中有对应的存储单元吗?答非所问,题都没看清!!那为什么我用printf("%x... 在C语言中,若我定义一个数组a[10],我们都知道a的值就是a[0]的地址,那么请问a在内存中有对应的存储单元吗?
答非所问,题都没看清!!

那为什么我用printf("%x",&a);
这样的得到的地址值是a[10]地址?为什么不是变量a的地址?或者说怎么获得用于存放数组a[10]首地址的单元 的地址?
展开
 我来答
百度网友8e0074d4c
2007-12-15 · 超过12用户采纳过TA的回答
知道答主
回答量:22
采纳率:0%
帮助的人:0
展开全部
获得用于存放数组a[10]首地址的单元 的地址?
printf("%x",&a[0]); 或者printf("%x",a);

数组首地址a为常量,不是变量,没有存储单元.使用printf("%x",&a); 得到的地址值是a[10]地址,完全因为巧合。编译器应该给出警告.
风骚的可乐
2007-12-15 · TA获得超过1550个赞
知道小有建树答主
回答量:412
采纳率:0%
帮助的人:609万
展开全部
那为什么我用printf("%x",&a);
这样的得到的地址值是a[10]地址?为什么不是变量a的地址?或者说怎么获得用于存放数组a[10]首地址的单元 的地址?

答:

a的地址就是你所谓的a[10]的地址,实际上根本就没有a[10]的地址,understand?

获得首单元的地址用printf("%x",&a[0]);
实际上,写a,或者&a,或者&a[0],得到的地址都是一样的。这是编译器的内部实现机制的问题,超出我们的讨论范围。

一般的,我们说a是一个数组“变量”,它的值就是他的地址.

补充下,一般编译器编译过程中,数组名变量是属于编译器临时生成的变量,详细的内容建议你去看看《编译原理》。

========================

我们没看清? 还是没仔细看我写的内容?

既然a是一个数组“变量”,怎么可能没有对应的存储单元?

=========================

定义一个数组a[10]

那么实际上我们应该说,我们定义了一个某类型(如int)10个元素的数组变量a。
a的值,就是某个地址,这段地址是预分配的,大小为10*sizeof(type)。

这也就是为什么我们常说,可以把数组变量直接看成指针的原因了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
美南子不搞笑
2007-12-14
知道答主
回答量:15
采纳率:0%
帮助的人:5.3万
展开全部
是根据你的数组类型分配地址的(但千万不要问我分配在哪块地址,那是计算机的事),如果是int、long、float那么分配单元均是10*4字节,double是10*8字节(这是c-free3.5的分配规则)
但是根据其他的教材int作2字节

分配单元字节数=数组长度*类型长度
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c29ae6e
2007-12-14 · TA获得超过610个赞
知道答主
回答量:279
采纳率:0%
帮助的人:58.1万
展开全部
当然有 系统会分配相应的空间给数组指针
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
L_o_o_n_i_e
2007-12-15 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5235万
展开全部
> 那为什么我用printf("%x",&a); 这样的得到的地址值是a[10]地址?
不应如此! 是不是 编译时 选了 “优化" 产生的副作用?

再算一遍看看吧。

#include <stdio.h>
#include <stdlib.h>
void main()
{
int a[11]; // 至少有11个单元
printf("%x %x\n",&a[0],&a[10]); // 才能打出a[10]的地址
printf("%x",&a);
exit(0);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式