“指针”就是“地址”。
指针变量的定义与初始化
定义格式
类型标识符 *指针变量名[=指针表达式];
- 指针变量的定义标识符是“*”,它用来定义变量为一个指针变量,不可省略;在 * 和指针变量之间可以有空格,也可以没有空格。
- “数据类型”是指该指针变量指向的变量的数据类型。
例如:
int *pointer_i; //定义一个指向整型值的指针变量pointer_i
int是数据类型名,说明pointer_i只能存放int类型变量的地址。
任意一个指针变量都要遵循“先定义,再初始化再使用”的原则。
指针变量初始化就是赋予一个初始的地址值。
例如,下面语句定义了一个字符型指针变量pointer_ch,ch;其中pointer_ch指向字符变量ch:
char ch;
char *pointer_ch = &ch;
指针可以初始化为0、NULL或者一个空指针。在C语言中,指针类型也是一种数据类型。void *是一个特殊的类型关键字,它只能用来定义指针变量,表示该指针变量无类型;或者只指向一个存储单元,不指向任何具体的数据类型。
注意:不能把一个数据赋给指针变量,例如:int *pointer_i = 1000;
指针运算符(&和*)
1.取地址运算符“&”
取地址运算符“&”的功能是取变量的地址,返回操作对象在内存中的存储地址。例如&i表示取变量i的地址。&只能用于一个具体的变量或者数组元素,而不能是表达式或者常量。
格式: &变量名
例如:pointer_ch = &ch; //将变量ch的地址赋给指针变量pointer_ch
2.取内容运算符“*”
取内容运算符“ * ”不是乘号,而是用来表示指针变量所指向的存储单元中的内容。在“*”运算符之后的变量必须是指针变量。
格式: *变量名
例如:char ch, *pointer_ch; //定义了一个字符的变量ch和一个指向字符型变量的指针变量pointer_ch
注意:取地址运算符“&”和取内容运算符“ * ”都是单目运算符,其结合性为自右至左。即 *&i的结果为i; &*i的结果也为i。
指针变量的赋值
-
通过取地址运算符(&)把一个变量的地址赋给指针变量。
-
同类型指针变量之间可以直接赋值,可以把一个指针变量的值赋给另一个指针变量。
例如:
int i;
int *pointer_int1,*pointer_int2; //定义了两个指向整型变量的指针pointer_int1和pointer_int2
pointer_int1 = &i; //将指针变量pointer_int1初始化为变量i的地址
pointer_int2 = pointer_int1; //通过赋值将指针变量pointer_int1的值赋予pointer_int2
执行以上语句后,指针变量pointer_int1和pointer_int2同时指向了变量i。 -
给指针变量赋空值。此时该指针变量为空指针,没有指向任何对象。
例如:
int *pointer_int;
pointer_int = NULL;//表示指针变量pointer_int的值为空
综合代码案例(通过指针判断两个数中的较大者):
#include <stdio.h>
int main()
{
int i,j,temp_max,*p_i,*p_j,*p_max;
p_i = &i; //对3个指针变量进行初始化
p_j = &j;
p_max =&temp_max;
scanf("%d%d",p_i,p_j); //输入两个整数,依次存入变量i,j
*p_max = *p_i;
if(*p_max < *p_j)
*p_max = *p_j;
printf("The max value is:%d\n",temp_max);
system("pause");
return 0;
}
程序运行时输入:
程序运行结果:
谢谢浏览!