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]首地址的单元 的地址? 展开
答非所问,题都没看清!!
那为什么我用printf("%x",&a);
这样的得到的地址值是a[10]地址?为什么不是变量a的地址?或者说怎么获得用于存放数组a[10]首地址的单元 的地址? 展开
6个回答
展开全部
那为什么我用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)。
这也就是为什么我们常说,可以把数组变量直接看成指针的原因了。
这样的得到的地址值是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)。
这也就是为什么我们常说,可以把数组变量直接看成指针的原因了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是根据你的数组类型分配地址的(但千万不要问我分配在哪块地址,那是计算机的事),如果是int、long、float那么分配单元均是10*4字节,double是10*8字节(这是c-free3.5的分配规则)
但是根据其他的教材int作2字节
分配单元字节数=数组长度*类型长度
但是根据其他的教材int作2字节
分配单元字节数=数组长度*类型长度
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当然有 系统会分配相应的空间给数组指针
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
> 那为什么我用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);
}
不应如此! 是不是 编译时 选了 “优化" 产生的副作用?
再算一遍看看吧。
#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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询