Logo

郎哥编程

第35讲:指针的操作

2026-03-31 22

指针变量是一个特殊的变量,它用于存储其它变量或程序对象的内存地址。声明指针变量后,开发者可以使用“&”运算符取出其它变量的内存地址,赋值给指针变量。

例如:

int a = 20;

int *p;

p = &a;

代码段声明了整型变量a和指针变量p,整型变量a初始化为20,指针变量p在声明时没有初始化,当前p的值为随机的内存地址,p在初始化之前是不能被使用的,否则会出现意想不到的错误。代码段的第3条语句使用“&”运算符取出变量a的内存地址,赋值给指针变量p,此时指针变量p的值为变量a的内存地址。下图描述了指针变量和变量a的关系。

“&”运算符用于取出变量或程序对象的内存地址,它是一个单目运算符,返回操作数的内存地址,可以赋值给类型合适的指针。

指针变量p被赋值后,它存储了变量a的内存地址,当前p和变量a都指向了同一内存地址,下面的赋值语句是效果相同的代码:

int temp;
temp = a;
temp = *p;

变量a赋值给temp,temp的值为20,我们重点看第2条赋值语句,*p是取出指针变量p指向的内存地址中保存的数据,因为p保存了变量a的内存地址,因此相当于把变量a再次赋值给了temp。

“*”运算符也是单目运算符,用于获取给定地址(指针变量保存的内存地址)中保存的数据。“&”和“*”运算符与其它单目运算符的优先级相同,自右向左结合。

使用“*”运算符也可以把数据保存到指针变量指向的内存地址。例如:

*p = 20;

指针变量p指向的内存地址保存的数据为20.

例【1】指针变量的间接赋值

编程要求:声明一个整数变量x,一个整数类型的指针变量p,取出变量x的地址赋值给指针变量p,将整数20保存到p指向的内存地址,输出变量a的值。

程序清单 sample.c

#include<stdio.h>
void main()
{
	int x;
	// 变量x的内存地址赋值给指针变量p
	int *p = &x;
	// 整数20保存到p指向的内存地址
	// *p = 20 等价于 x = 20
	*p = 20;
	// 输出x的值
	printf("x=%d",x);
}

案例7-1演示了指针变量间接给变量x赋值的作用,指针变量p的值为变量x的内存地址,*p = 20语句将整数20赋值给p指向的内存地址,p指向的内存地址即为变量x的内存地址,因此变量x被赋值为20。

例【2】指针变量参与运算

编程要求:分别声明浮点变量x和y并初始化,声明两个浮点类型的指针变量px和py,变量x的地址赋值给px,变量y的地址赋值给py,使用px和py计算变量x和y的乘积,乘积结果赋值一变量,并输出该变量的结果。

程序清单 sample.c

#include<stdio.h>
void main()
{
	float x=3.1,y=2.6;
	// 变量x和y的内存地址赋值给指针变量px和py
	float *px = &x,*py=&y;
	// 计算*px和*px的乘积
    float result = *px * *py;
	// 输出x的值
	printf("x*y=%.2f",result);
}

案例2演示了指针变量取值和参与运算的使用方法,*px是取出px指向内存地址的数据,因为px指向变量x的内存地址,因此*px取出的数据为3.1,同理*py取出的数据为2.6.

小结:当一个指针变量和变量A的内存地址绑定后,这个指针变量实际就是变量A的一个引用,对指针变量的赋值和取值操作都是针对变量A进行的。

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论