2025年4月5日 星期六 乙巳(蛇)年 正月初六 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > C语言

什么是C语言指针?

时间:10-08来源:作者:点击数:74

代码清单 1:自定义函数交换两个变量的值(错误的解决方法)

  • #include <stdio.h>
  • #include <stdlib.h>
  • /*--自定义函数:交换两个变量的值--*/
  • void swap(int a, int b)
  • {
  • int temp;
  • temp = a;
  • a = b;
  • b = temp;
  • }
  • /*--主函数--*/
  • int main( )
  • {
  • system("color 70");
  • int dA, dB;
  • puts("请输入两个整数:");
  • printf("整数dA:");
  • scanf("%d",&dA);
  • printf("整数dB:");
  • scanf("%d",&dB);
  • swap(dA,dB);
  • puts("互换以后的变量值:");
  • printf("dA=%d dB=%d\n",dA,dB);
  • system("pause");
  • return 0;
  • }

运行结果为:

请输入两个整数:
整数dA:10
整数dB:8
互换以后的变量值:
dA=10 dB=8

在代码清单 1 的程序中,main( ) 函数调用 swap( ) 函数时,实参 dA、dB 的值分别传给形参 a 和 b(值传递),在 swap( ) 函数内变量 a 和 b 的值进行了互换。但是,变量 a 和 b 只是实参变量 dA、dB 的副本,变量 dA、dB 本身的值并没有改变。因此,在此代码中使用函数并没有实现变量 a 和 b 的值的交换(见图 1)。

函数中形参变量值的改变并不影响实参变量的值
图 1:函数中形参变量值的改变并不影响实参变量的值

为了解决这个问题,我们可以使用 C语言提供的指针(pointer)。指针实质上是一个变量,该变量里面存储的是某个特定变量在内存中的地址,我们把它表述为指向该特定变量的指针变量(指针),该指针变量的类型与它指向的变量的类型一致。

变量是计算机内存中存储数值的“小房子”,这些小房子在内存空间中并不是杂乱无章地随便放置的,而是如图 2b) 所示,有序排列在内存空间中的。这些存放在内存空间中的变量我们统称为对象。变量(对象)在内存空间中的存放位置就是其内存地址。在 C语言中,我们可以用取址运算符&获取一个变量(对象)的内存地址(十六进制数)。

内存中的变量(对象)
图 2:内存中的变量(对象)

代码清单 2:用取址运算符 & 获取变量(对象)的内存地址

  • #include <stdio.h>
  • #include <stdlib.h>
  • int main( )
  • {
  • system("color 70");
  • int a, b, dA, dB;
  • printf("a 的地址:%p \n", &a);
  • printf("b 的地址:%p \n", &b);
  • printf("dA的地址:%p \n", &dA);
  • printf("dB的地址:%p \n\n\n", &dB);
  • system("pause");
  • return 0;
  • }

运行结果为:

a 的地址:0060FEFC
b 的地址:0060FEF8
dA的地址:0060FEF4
dB的地址:0060FEF0

在代码清单 2 中,变量 a,b,dA,dB 在内存中的地址可分别用 &a、&b、&dA、&dB 获取(见图 3)。用 printf( ) 函数显示变量地址时要用转化字符%p

取址运算符 & 的运用
图 3:取址运算符 & 的运用
知识点总结
  • 指针实质上是一个变量;
  • 指针变量的类型与它指向的变量的类型一致;
  • 指针变量里面存储的是它指向的变量在内存中的地址。
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门