关于数组,部分引用《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)
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)
相关文章推荐
- C++笔记总结之关于数组的引用和引用的数组
- 关于数组的引用和引用数组
- C&C++关于数组的定义,引用传参问题
- 关于数组参数的传递及其引用的传递
- C++学习笔记(四)——关于数组作为函数参数的值传递和引用传递
- Delphi中关于动态数组的引用操作
- 关于数组的基本数据类型和引用类型
- 请教关于结构体数组的引用出错
- 关于实现引用类型数组去调用引用类的方法的问题的解决
- 关于ThinkPHP5.0*的软删除delete_time的引用和部分时间函数where(),whereTime()连贯操作的问题
- 关于C语言的数组部分归纳
- 关于数组的引用
- 关于C语言的数组部分归纳
- C/C++中关于地址、指针和引用变量的学习笔记(二) : 数组
- 二、关于数组、值类型、引用类型及其他
- 关于从list或者数组中随机抽取部分不重复元素的问题探究
- 关于数组和指针(引用《C和指针》上的一段内容)
- Java基础--关于分支、循环、数组的部分练习题及详解
- [C++]关于数组的引用和引用的数组
- 关于数组的引用类型和值类型