1、指针数组元素与指针
数组是由同一种数据类型的元素系列构成,数组元素按顺序存储在内存中,通过使用索引来访问数组元素。在c语言中,首元素的索引值为0,因此包含n个元素的数组的末元素索引n-1;
要正确严谨的使用数组,因为编译器和程序运行都不会检查索引的合法。
在数组中,每一个数组元素在内存中都占用存储单元,都有相应的地址,数组元素指针就是数组元素的地址。
注:数组a不代表整个数组,只代表数组元素的地址。p=a表示把数组的首元素地址赋值给指针变量p;
#include<stdio.h>
int main(){
int a[4]={1,3,5,6};
//定义一个指针类型的变量p,p指向数组中第一个元素地址
//等价于 int*p=a;或者int *p=&a[0];
int *p=a;
printf("%d\n",*a);//输出第一个元素地址中的值
printf("%d\n",*a+1);//*a+1是在第一个元素值上加1;
printf("%d\n",*(a+1));//输出数组中第二个值
printf("%d\n",*(a+2));//输出数组中第三个值
printf("%d\n",*(a+3));//输出数组中第四个值
return 0;
}
运行结果:
- 指针的数值就是它所指向的对象地址。
-
- 在指针前用运算符*可以得到该指针所指向的对象的数值。
- 对指针加1,等价于对指针的值加上它指向的对象的字节大小。
- 数组名就是数组元素的首地址。
- a[i]和*(a+i)是意义等价的。
基于此,数组与指针之间就有密切关系,我们就可以用指针标识数组的每个元素,并且得到每个元素中的值。
2、指针操作
指针变量可以执行8种基本操作,还可以使用关系运算符来比较指针。
- 赋值:把一个地址值赋值给指针。int a=2; int *p=&a;
- 求值:运算符*可以取出指针指向地址中存储的数值。
- 取指针地址:使用&可以得到存储指针本身的地址。
- 将一个整数加给指针:使用+运算符把一个整数加给指针。两种情况:一种情况下这个整数都会和指针所指类型的字节数相乘,然后把所得结果加到初始地址上。另一种情况,如果超出初始指针所指向的范围,那么这个结果是不确定的。
- 比较:可以使用关系运算符来比较两个指针的值,前提是两个指针具有相同的类型。