复试_C语言复习之指针
指针的由来
我们都知道,任何变量在内存中都会开辟相应的存储空间来存储这些变量,但在用户编写C程序时,并不知道该变量具体的存储地址,因此指针便应运而生,成为了C语言的灵魂。
地址运算符‘&’:
变量的地址是由编译系统分配的,用户并不知道变量的具体地址,地址运算符“&”用来表示变量的地址,例如:
int x;
&x;//取变量x的地址
因为x声明为“int”类型的变量,内存会分配两个存储单元,那么当取地址的时候,会将为‘x’分配的第一个存储单元的地址返回,假如为‘x‘分配的存储单元为0x0002、0x0003,&x的值将为0x0002。
如何间接地利用地址访问数据
如下图:
其中p=&x;语句是将x变量的地址存入p中,既然用到了变量p,就必须对p变量进行定义声明,由于p是存地址的变量,为了与以前地基础变量加以区别,故声明为"p",将其声明为“int”类型后,在访问p时就应该从其首地址开始向下访问2个存储单元,故*p=12;*是向p指向的x变量中存入12。
指针变量的初始化
1.直接初始化:
int x,*p=&x;
2.间接初始化
int x,*p;
p=&x;
3.错误的指针变量初始化
int x;
float *p=&x;//指针变量类型与基变量类型不一致
int x,*p;
p=1000;//指针变量不能赋立即数;
注意:指针变量不仅要定义,而且还要赋具体的初值,当没有具体的地址值时,应该用int *p=NULL来赋初值。
引用指针变量所指向的变量
用“ *指针变量名”来表示引用该指针变量间接访问的变量,如下图:
上图与x=12;的作用相同。
访问变量的两种方法:
1.直接通过该变量名直接访问该变量
2.通过指向变量地址的指针变量间接访问该变量
指针变量的相关运算
指针变量加或减一个整数就是将指针指向的当前位置向前或向后移动n个偏移量(n*sizeof(基类型))。
例如:
int *pa,a;
pa=&a;
pa=pa+2;//即pa指向a的首地址+4
两个指针变量相减,即为两个指针指向的地址相减除以基变量的类型,如下图:
而p1+p2没有实际意义。
指针综合应用
int *pi; //整型指针变量
char *pc; //字符型指针变量
float *pf; //浮点型指针变量
struct stu *ps; //结构体指针变量
int (*qi)[5]; //整型数组指针
char *qc[5]; //字符型指针数组
float (*qf)(); //浮点型函数指针
struct stu *qs(); //结构体指针函数
特别地,指针还可以作为函数的参数,达到引用传递的效果