Sunday, October 10, 2010

c专家编程-数组和指针的恩怨情仇

这里把4,9,10章的内容结合在一起,主要谈论的是数组,指针的使用,以及何时相同,何时不同。
通常情况下对于数组和指针单独使用的时候,还是比较清晰的,这里就只简单提下容易混的地方。

什么时候数组和指针式相同的
c语言标准作了如下说明:
    规则1. 表达式中的数组名(与声明不同)被编译器当做一个指向数组第一个元素的指针
int a[10], *p, i = 2;
p = a;
p[i];
p = a;
*(p + i);
p = a + i;
*p是等同的
需要声明这里有极其特殊的理我,对数组的引用不能用指向数组第一个元素的指针来代替
sizefo的时候,sizeof(数组)是数组的大学,而sizeof(指针)是指针的长度
    规则2. 下标总是与真正的偏移量相同
c语言把数组下标改成指针偏移量的根本原因是指针和偏移量是底层硬件使用的基本类型
使用&去数组的地址
数组是一个字符串(或宽字符串)常量初始值
    规则3. 在函数参数的声明中,数组名被编译器当作指向该数组第一个元素的指针
作为形参的数组和指针等同主要出于效率的考虑,假如用传值,传递整个数组代价很大,而指针则不同
这里建议参数定义为指针

除上述情况外,定义和指针必须匹配,如果定义数组,在其他文件对他进行声明时候,必须声明为数组,指针也是

同时需要注意的是,数组名被改写成一个指针参数 并不是地规定义的,数组的数组改写为数组的指针,而不是指针的指针,本来是数组的需要改变,而本来是指针的不需要改变

其他:关于多维数组以及字符串数组等情况不再说明,需要详细参考原文啦:)
--
BlogSpot http://xusulong.blogspot.com Twitter  http://twitter.com/econsh

1 comment: