学习C语言也有一段时间了,是时候总结一下了。
定义:指针是一种保存变量地址的变量。
语句 p = &c; 将把c的地址赋值给变量p,我们称p为“指向”c的指针。地址运算符&只能应用于内存中的对象,即变量与数组元素,它不能作用于表达式、常量或register类型的变量。
一元运算符*是间接寻址或间接引用运算符。
int x = 1,y =2, z[10];
int *ip; // 将ip声明为指向int的指针
ip = &x //将x的地址赋值给ip,也就是ip指向x
y = *ip//*ip表示获取ip指针指向变量的值,也就是x的值,然后将它赋值给y
*ip = 0//*ip在等号的左边,以左值形式存在,也就是代表所指向的变量,类似于x = 0
ip = &z[0]//ip指向z数组的第一个元素,就是指向z[0] ,也可以写成ip = z,因为z就是默认第一个元素的地址
有效的指针运算:
1.相同类型指针之间的赋值运算
2.指针同整数之间的加法或减法运算
3.指向相同数组中元素的两个指针间的减法或比较运算
4.将指针赋值为0或指针与0之间的比较运算
指向指针的指针:
根据指针的定义,其实,指向指针的指针就是,一个指针保存了指向其他数的指针的地址.
#include <stdio.h>
int main () {
int var;
int *ptr;
int **pptr;
var = 3000;
/* take the address of var */
ptr = &var;
/* take the address of ptr using address of operator & */
pptr = &ptr;
/* take the value using pptr */
printf("Value of var = %d\n", var );
printf("Value available at *ptr = %d\n", *ptr );
printf("Value available at **pptr = %d\n", **pptr);
return 0;
}
输出结果是这样的:
Value of var = 3000
Value available at *ptr = 3000
Value available at **pptr = 3000
指针数组和数组指针:
指针数组指的是由指针构成的数组,里面的指针指向指针内存储的地址,也可以说数组的元素是地址。而数组指针却是一个指向数组的指针,指针的值是数组的地址。