一维数组的探索
来源:互联网 发布:银背大猩猩战斗力知乎 编辑:程序博客网 时间:2024/05/22 04:50
昨天面试时被考官问到指针和数组,比较刁钻的问题,没答出来,丢死人了。
按照定义,一维数组是指全部数组元素组成的一段连续的存储空间,这个空间称为数组变量。数组中的元素只能间接引用,所谓间接引用,是指通过指向该单元的地址指针来访问该单元。因此,数组名都代表数组首元素的指针常量(首元素的地址)。其实数组名首先是数组空间的标识符,代表数组变量,这就是数组名的另一个含义。
数组变量的类型是由数组元素类型和数组长度联合表示,如:
double d[5];
数组变量d的类型是double[5].表达式sizeof(d) == 40;
数组空间取值&d的基类型是double[5],&d+1比&d大40.
数组指针d的基类型是double*,是指向数组首元素的指针常量。
如果想要高效的利用内存资源,可以通强制类型转换把数组空间的指针传递给其它类型的指针变量,这样就可以把用过的数组空间用来存放其它类型的数据,实现内存空间的最大利用。原理:同一段空间,可以用做不同类型的数组空间,取决于访问空间的指针类型。
用指针最怕啥?野指针!何为野指针,一个指针变量若果没赋值,它存储的地址就是不确定的,若果利用这样的指针执行间接引用,会破坏系统中的数据,是非法的!
如:int *p;
*p = 5;//非法!
void型指针称为通用指针或泛指针,可以把任何类型变量的地址赋给它,但不能利用泛指针做相应类型的访问处理!
如: void *p; int x=5;
p=&x; //合法
*p=6; // 非法
printf("%d",*p); //非法
void 指针主要用于单纯的内存数据复制,内存分配函数malloc()返回的就是void型指针,如(int*)malloc(1024);就表示malloc返回的是基类型为int的指针。(坑爹啊,考官问的就是这题,可我当时脑子里一片空白!!!)
在ANSI C标准中,不允许对void指针进行一些算术运算如p++或p+=1等,因为既然void是无类型,那么每次算术运算我们就不知道该操作几个字节,例如char型操作sizeof(char)字节,而int则要操作sizeof(int)字节。而在GNU中则允许,因为在缺省情况下,GNU 认为void *和char *一样,既然是确定的,当然可以进行一些算术操作,在这里sizeof(*p)==sizeof(char)。
- 一维数组的探索
- 探索二维数组的动态分配
- 空数组 《深度探索C++对象模型》上的一处变迁
- js 的一维数组,二维数组
- 数组的特性:一维数组
- 数组与指针的艺术--深入探索
- 二维数组与指针的探索
- 插入数组越界问题的探索
- C++中函数传递数组的探索
- 【RPC框架探索】(一)ICE框架的探索
- 一维数组的使用
- 一维数组的遍历
- 一维的树状数组
- 一维数组的初始化
- 一维数组的引用
- 一维数组的地址
- 一维数组的移动
- 一维数组的地址
- 未来智能设备不再以视觉展现为主!
- 改变unity场景的图片比例保存到xml当中
- 01机房可行性研究报告
- hdu 2161 Primes
- android中一个与智能机器人问答的简单程序
- 一维数组的探索
- WordPress性能优化
- Java 虚拟机中的存储的理解 堆栈 GC
- 50. 别逗我了,好吧!
- USACO 1.4 The Clocks (暴力枚举)
- A013-animator资源
- PHP中SQL注入解析
- rm命令切换
- 节点管理器启动报错