学c不久,一个小问题
一个数组a[10],当a 作为右值的时候代表的是什么意思呢?a 作为右值时其意义与&a[0]是一样,代表的是数组首元素的首地址,而不是数组的首地址。这仅仅是代表,并没有一个地方来存储这个地址,也就是说编译器并没有为数组a分配一块内存来存其地址,这与指针有很大的差别。它是怎样获取这个地址呢?
话说a,&a值一样,a既然不是指针,但它的值是个地址,且等于本身所占内存的地址,它的本质是什么呢?我知道它是一块内存的名字,但能否有大侠详尽地描述一下,将其解剖一下,从各个角度都可以,先谢过了
[解决办法]
数组首元素的地址就是数组的地址呀。它跟指针是一样的。
编译器在处理数组的时候就是分配一块连续的区域,然后把这块区域的首地址给数组名。
数组名既是数组的的首地址,也是数组首元素的地址。
[解决办法]
数组a[10]中的10个元素的地址分别为a,a+1,a+2,......,a+9;数组中的元素的内存是物理上连续的,一般都是用首元素地址表示数组地址,所以数组的长度是不知道的,在调用数组时一般需要再使用一个数值来告诉编译器需要用到这个数组的多少个元素,所以数组使用时很容易越界。给你举个例子吧:
#include<stdio.h>int main(){ void output(int a[],int n); int a[10]={1,2,3,4,5,6,7,8,9,10}; output(a,5);//这里的输出的1,2,3,4,5 output(a+1,5);//这里输出的是2,3,4,5,6 output(a,11);//这里输出的是1,2,3,4,5,6,7,8,9,10,1245120 return 0;}void output(int a[],int n){ for(int i=0;i<n;i++) { printf("%d ",a[i]); } printf("\n");}
[解决办法]
明白你的意思了。
给你两个链接,看看能否解决你的疑问。
http://blog.csdn.net/yznkaixin/article/details/2493927
http://www.2cto.com/kf/201201/117466.html
[解决办法]