地址与指针:
在程序中定义了一个变量,在进行编译时就会给该变量在内存中分配一个地址,通过访问这个地址可以找到所需的变量。这个变量的地址称为该变量的指针。
形如:
上图所示地址1000是变量i的指针。
变量与指针:
变量的地址是变量和指针二者之间连接的纽带,如果一个变量包含另一个变量的地址,则可以理解成第一个变量指向第二个变量。
指向就是通过地址来体现的,因为指针变量是指向一个变量的地址,所以将一个变量的地址赋给这个指针变量后,这个指针变量就指向了该变量。
形如:
将变量i的地址存放到指针变量p中,p就指向i。
指针变量:
如果有一个变量专门用来存放另一个变量的地址,他就是指针变量。
指针类型:
C语言中有专门用来存放单元地址的变量类型,即指针类型。
1、指针变量的一般格式:
定义指针变量:
类型说明 * 变量名;
其中,*表示该变量是一个指针变量,变量名即为定义的指针变量名,类型说明表示本指针变量所指向的变量的数据类型。
2、指针变量的赋值:
给指针变量的赋值只能赋予地址,而不能赋予任何其他数据。
C语言提供了地址运算符“&”来表示变量的地址。
一般形式为:
& 变量名;
如:&a表示变量a的地址,&b表示变量b的地址。
(1)定义指针变量的同时进行赋值。
int a;
int *p=&a;
(2)先定义指针变量之后再赋值。
int a;
int *p;
p=&a;
注意:
如果在定义完指针变量之后再赋值不要加" * "。
习题:模拟场景:输出标准答案,假设Z同学是班级里写作业最好的同学,大家都喜欢抄他的答案,
一天A同学找Z同学:把作业借我参考一下,Z同学说:标准答案在Y那里,Y说答案是10。代码如下:
注意:不能把一个数值赋予指针变量。
3、指针变量的引用:
引用指针变量是针对变量进行间接访问的一种形式。
*指针变量
含义为引用指针变量所指向的值。
习题:任意给定两个变量的值,利用指针编写程序将两个数交换。代码如下:
4、"&"和"*"运算符:
运算符"&"是一个返回操作数地址的单目运算符,叫做取地址运算符。
p=&i;
就是将变量i的内存地址赋给p。
运算符" * "是单目运算符,叫做指针运算符。
作用:返回指定的地址内的变量值。
q=*p;
5、"&*"和"*&"的区别:
int a;
p=&a;
习题:9头羊渡河,他们找来一支能载3头羊的木头,如果只有一头羊会划木船,那么至少几次能全部渡过河?代码如下:
指针自增自减运算:
基本整型变量i在内存中占4个字节,指针是指向变量i的地址的,这里的p++不是简单的在地址上加1,而是指向下一个存放基本整型数的地址。