一个变量有地址,一个数组包含若干个元素,每个数组元素都有相应的地址(数组元素的指针地址是连续的)。比如:int arr[10]数组名不代表整个数组的地址,数组名代表首元素的地址,arr == &arr[0]答案是ture。
在使用指针指向数组元素时,允许进行加法(加常量)、减法(减常量)、自增、自减运算。- int arr[5] = {1, 10, 20, -10, 5};
- int *p = arr; //等价于 = &arr[0];
- printf("p = %p\n", p); //输出p的值
- printf("p + 1 = %p\n", p+1); //输出arr[1]的地址,等价于 &arr[1];
- printf("arr[1] = %d\n", *(p+1)); //输出arr[1]的值
- printf("arr[1] = %d\n", *p++); //输出arr[1]的值
复制代码数组指针进行运算的时候可能会有超过数组元素的情况,比如:数组元素是5个,输出*(p+10)的值,这样写不会报错,可以正常输出该地址的值。数组名也可以像指针变量一样进行加法、减法运算,但是不能自增、自减。 指针相减两个指针相减所得之差是两个指针所指数组元素之间相差的元素个数。(地址值 - 地址值)/ sizeof(指针类型)。两个指针变量之间不能有加法运算(没有意义)。
常见用法(两个指针指向同一个数组): - 判断两个指针变量指向的元素是否连续
- 判断两个指针变量之间相隔几个元素
指针的关系运算两个指针可以比较大小,p > p1 这样的写法是没有错的。p1在高位返回为1,否则返回0。
|