指针是一种保存变量地址的变量,即内存地址
一元运算符*是间接寻址或间接引用运算符
*ip + = 1 // ip指向的对象的值加1
等同于 ++ *p或者(*p)++,此处的圆括号是必需的,否则,该表达式将对ip进行加一运算,而不是对ip指向的对象进行加一运算,这是因为,类似于*和++这样的一元运算符遵循从有至左的结合顺序
Pa = &a[0]等同于Pa = a,因为数组名所代表的就是该数组最开始的一个元素的地址
对数组元素a[i]的引用也可以写成*(a+i)这种形式
&a[i]等同于a+i,其中a+i是a之后第i个元素的地址
数组名和指针之间有一个不同之处,指针是一个变量,在C语言中,语句pa=a和pa++都是合法的。但数组名不是变量,因此,类似于a=pa和a++的语句是非法的。
当把数组名传递给一个函数时,实际上传递的是该数组第一个元素的地址,在函数定义汇总,形式参数char s[]和char *s是等价的。我们通常更习惯于使用后一种形式,因为它比前者更直观地表明了该参数是一个指针。
可以将指向子数组起始位置的指针传递给函数,例如a是一个数组,那么下面两个函数调用f(&a[2])和f(a+2)都将起始于a[2]的子数组的地址传递给函数f。在函数f中,参数的声明形式可以为f(int arr[]){....}或f(int *arr){...}