您的位置:首页 > 编程语言 > C语言/C++

关于数组,部分引用《C语言深度剖析》

2012-04-12 18:16 239 查看
首先我们定义一个数组:

int[5]={1,2,3,4,5};

对于这样的数组的初始化,我们只在定义的时候初始化,而不能以a[5]={1,2,3,4,5};初始化形式的初始化;当我们定义一个数组时,编译器根据我们制定的类型和大小,为数组开辟一块空间,数组名为a。sizeof(a)=20,sizeof(a[0])=4,那么sizeof(a[5])编译器会不会报错呢?首先sizeof()是关键字,不是函数。关键字在编译的时候求值,函数求值在运行之后,所以这里不会真的访问a[5]。

1.关于&a[0]与&a的区别:打个比方吧,好比江苏省政府跟南京市政府都在南京,地址都是一样的,但是很显然管辖范围不一样的啊!

2.当数组名a作为右值时,代表数组首元素的首地址,而不是数组的首地址。数组名a不能做为左值。编译器会以为a代表数组首元素的首地址,而已这个地址开始的是一块内存,我们只能访问数组的某个元素,不能访问整块内存。

3.指针和数组的区别:其实他们之间没有什么关系。指针在32位机,不管是什么类型,大小为四个字节;而数组的大小根据类型长度决定。访问数组可以使用指针*p++,或者下标p[i],或者数组首地址加偏移量*(a+i)。

4.a和&a的区别:a代表数组首元素的地址也就是a[0]地址,a+1也就是a[1]的地址。而&a表示数组的地址&a+1表示下一个数组的首地址。

5.指针和数组的声明与定义:定义为数组,声明为指针;定义为指针,声明为数组;这两种都是不对的。下面举个例子:

在文件1 中定义了char a[5];

在文件2中声明:extern char *a(X);extern char a[] or extern char[100](right)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: