指针与数组的关系密切,由数组下标能完成的操作都可由指针操作实现。当然,使用数组下标方式,程序的可读性要强些;而使用指针方式,代码会更紧凑,利用得当,效率也会提高。
1.指向数组的指针
指向数组的指针是指这个指针指向数组的起始地址。定义方式与指向变量的指针的定义方式相同。例如:
int a[5]={2,4,6,8,10};
int *p;
p=&a[0];
注意:
(1)指向数组的指针的类型应该与数组的类型一致。
(2)数组名代表数组的起始地址,是一个常量。也就是数组的第一个元素的地址。
● 依据上面的例子,下面的两条语句等价:
p=&a[0]; // p指向数组a的起始地址
p=a; // p指向数组a的起始地址
● 依据上面的例子,下面的两条语句不等价:
p++; // 指针变量p的自增运算,表示p指向数组a的下一个元素
a++; // 错误语句,原因为:数组名a是常量,不能进行自增运算(www.xing528.com)
(3)如果p指向a数组中的某一个元素,则p+1就指向该元素的下一个元素。
(4)如果p指向a数组的起始地址,则
● p+i与a+i均表示数组元素a[i]的地址。
● *(p+i)与*(a+i)均表示p+i与a+i所指向的数组元素a[i]的值。
(5)对指向数组(字符串)的指针变量可以进行指针的算术运算,如指针自增、自减运算,指针与整数的加减运算,目的使指针在数组(字符串)的各元素间移动。对指向同一数组的两个指针变量可以做减法运算。
2.指针数组
如果一个数组的所有元素都为指针,则这个数组就是一个指针数组。指针数组中的每一个元素都是指针变量。常用的一维指针数组的定义形式如下:
类型名 *数组名[数组长度];
由于运算符[ ]的优先级高于运算符*,故数组名先与[ ]结合,表示定义的是一个数组,再与*结合,表示数组中的每一个元素都是指针类型。例如:
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int *p1[3]={a[0],a[1],a[2]}; //a[i]表示数组a的第i行首元素的地址
指针数组p1的元素p1[0]、p1[1]、p1[2]均为整型指针,分别指向数组a的每一行的第一个元素。这里*(p1[0]+2)表示数组a的元素a[0][2]的值3。
注意:指针数组更多地用于处理多个字符串。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。