说明:大家好,我所写的东西是我在学习C语言的过程中遇到的一些问题,这些问题我碰到之后觉得重要会记录下来,理解并用自己的话去解释,有些不对的地方还望大家指正。 另外这些都是我平时做题时或者看书时想到的,可能不是按部就班的,没有先后顺序,望大家见谅。
一维数组与指针之间的关系;
假如指针变量 px 指向数组 x[] 的首元素,则;
x[i], * (px+i), * (x+i), px[i]具有完全相同的功能,即访问数组第 i+1 个元素。
首先, x[i] <==> * (x+i) 是无条件等价的,指针变量指向数组 x[] 的首元素==> px = x; 那么,px[i] == x[i] , * (px+i) = * (x+i). 所以以上4中方式的表达功能是一样的。
指针变量 px 和数组名 x (也叫数组的指针)有着本质的区别。
指针变量是地址变量,而数组的指针是地址常量,来看几个例子;
x++; px++; x+1;
在以上3条语句中 x++; 是错误的,因为数组的指针是地址常量不能做++运算; px++; 是正确的,px为指针可以++,向地址大的方向移动,且自加一次移动的地址为所指向数据类型的字节数。 eg:若指针为 int 型,px++,地址往大的方向移动 4 位; x+1; 是正确的,因为 x+1; 执行之后并没有改变 x 的值。
#include <stdio.h> int main() { int a[] = {1, 2, 3, 4, 5, 6, 7}; int * p; p = a; a+1; p++; printf("%d\n",p[1]; return 0; }个程序的结果是 3 首先指针 p 指向了数组 a[] 的首元素,也就是1; 然后 a+1; 这句没什么意义,因为数组名 a 是常量; 接着 P++;指针往后移了一次,指向了 a[1],此时 a[1] = p[0]; 最后打印出 p[1],p[1]相当于 p[0+1],也就是 a[1+1] == a[2],所以结果是3. “`