指针变量和数组变量有何区别

来源:互联网 发布:眉毛生长液 知乎 编辑:程序博客网 时间:2024/04/30 15:34
指针变量和数组变量有何区别
 
--------------------------------------------------------------------------------
 资料文章  加入时间:2007-4-12 19:34:51  网络教育学院 张俊  点击:434
指针变量与数组变量密切相关,但二者又有本质上的区别。下面分别进行介绍:

1,指针变量是一个变量,该变量也具有某些类型,包括复合类型,但该变量是指向某一类型的指针。因此,指针变量中只能存放指针(或地址),而不能把一个非地址型的量赋给一个指针变量。存放的地址必须是指针变量指向的类型变量的地址,不能是其他类型变量的地址,在引用指针变量时,只有明确把指针指向某一变量后才可引用该指针变量的值(地址或变量)。如:

int *point1;
point1=1000H;

这明显是错误的,因为1000H是一个常量,不是一个地址,有人认为用1000H来表示一个存储单元的地址,为何不可呢?请记住1000H可表示一个地址单元,但1000H永远是一个整型常量(数字)。另外,指针变量引用要通过两种方法:*和&即指针运算符和取址运算符。

2,数组变量也是变量,不过不是一个变量而是某以数据类型的有序变量集合,数组中的每一个元素都代表一个变量。因此,数组没一个元素都可存放它所代表类型的一个数据,但当一个数组被定义为某一类型时,就不可存放其他类型的数据(这一点与指针类型相同),如:
定义 int a[5];的数组,如果存放a[0]=10.01;则系统会强制进行类型转换,a[0]将被赋予10;如果a[0]='a';由于a的ascii码为65,所以a[0]=65.

对数组元素的引用,可用指针变量来索引,数组名代表该数组的首地址,并可以参加运算,如:

static a[5]={0,1,2,3,4};
int *p=a;

则p可索引a[0],p+1可索引a[1]等。

用指针来索引数组可起到执行效率高的作用,但在用时要注意:
*(p++)与(++p)的区别。*p++等价与*(p++),因++与*预算府的优先级相同,按自右向左结合率,可知相同;(*p)++相当于(a[0])++,即元素的值加1;*(++p)相当于a[++i],即先++再*,然后取*p,相当于p+1->p.
原创粉丝点击