博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【C语言入门教程】4.5 指针变量的定义与引用
阅读量:6078 次
发布时间:2019-06-20

本文共 1510 字,大约阅读时间需要 5 分钟。

指针变量是包含内存地址的变量。一般的变量直接包含一个特定的值,而指针变量包含的是某一特定数据类型的内存地址。普通变量直接引用其中的值,指针变量则间接引用所指向内存地址中的值。指针变量在使用前需要声明与初始化。

 

4.5.1 指针变量的定义

指针变量定义时,需要指定所指向的数据类型。声明指针变量的一般形式为:

数据类型  *变量名

*”运算符通常称为 间接运算符间接引用运算符,在声明中以这种方式使用间接运行符时,它用以表明被声明的变量是指针变量。如下例所示:

int *pi;			// 声明一个整形指针变量char *pc;			// 声明一个字符型指针变量float *pf;			// 声明一个单精度浮点型指针变量

声明为整形的指针变量 *pi 只能指向整形变量或者整形变量数组元素。声明为字符型的指针变量则只能指向字符型数据。指针变量声明后,才可以写入指向某种数据类型的变量的地址,或者说是为指针变量初始化。如下例所示:

int *pi, i = 290;		// 声明整形指针变量 *pi 和 整形变量 i,并为 i 赋初始值char *pc, c = 65;		// 声明一个字符型指针变量 *pc 和 字符型变量 c,并为 c 赋初值float *pf, f = 1.414;	// 声明一个单精度浮点型的指针变量 *pf 和 单精度浮点型变量 f,并为 f 赋值pi = &i;				// 将整型指针变量 *pi 指向整型变量 ipc = &c;				// 将字符型指针变量 *pc 指向字符型变量 cpf = &f;				// 将单精度浮点型指针变量 *pf 指向单精度浮点型变量 f

上述赋值语句 “pi = &i” 表示将变量 i 的地址赋值给指针变量 pi,此时 pi 就指向了 i。3条赋值语句产生的效果是 pi 指向 i,pc 指向c,pf 指向 f,效果图如下所示。“&”运算符称为 取地址运算符,作用是取得变量的内存地址。

 

4.5.2 指针变量的引用

利用指针变量可直接改变内存中某一单元的值,这是一种对系统底层的访问。指针变量为复杂的操作带来便利的同时,也存在很大的安全隐患,使用不当时极容易引起程序的终止设置系统死机。利用指针变量间接引用变量的形式为:

*指针变量

间接运算符 在这里的作用是访问指针变量所指向的内存单元的值,如下例所示:

int *pi =, i = 100;		// 声明整型指针变量 pi 和 整型变量 i,并为 i 赋初值pi = &i;				// 将整型指针变量 pi 指向整型变量i*pi++;					// 间接访问变量i,使变量 i 的值自增printf("%d", i);		// 输出 i 的值

该程序的输出为 101,因为指针变量 *pi 间接引用变量 i,修改 *pi 的值等同于修改变量 i 的值。如果将代码第 4 行改写为:

printf("%d", *pi);		// 输出 *pi 的值

该程序的输出仍然为 101,*pi 与 i 的作用是等同的。很多函数都需要取得变量的地址以修改变量的值,如 scanf() 函数。在上例中如果使用指针变量修改 i 的值,则可以用以下代码实现。

scanf("%d", pi);		// 从键盘输入获取数据,保存在变量 i 中

这条语句的作用等同于 scanf("%d", &i),因为指针 pi 的值为变量 i 的地址,所以不能使用间接运算符。

C 语言有 2 个指针的运算符,分别是 取值运算符 和 间接引用运算符,这 2 个运算符都是一元运算符,它们的优先级仅次于一元算术运算符。

转载地址:http://dshgx.baihongyu.com/

你可能感兴趣的文章
使用ECMAscript5中的forEach函数遍历数组
查看>>
Linux之MySQL
查看>>
jekins 持续集成手记
查看>>
Android 为应用创建、删除桌面快捷方式
查看>>
Maven如何手动添加依赖的jar文件到本地Maven仓库
查看>>
Oracle安装部署,版本升级,应用补丁快速参考
查看>>
【Android】13.0 第13章 创建和访问SQLite数据库—本章示例主界面
查看>>
CentOS6.5安装Tab增强版:bash-completion
查看>>
2015华为机试——数字基root
查看>>
Java学习笔记(四):流程控制
查看>>
ios开发--第三方整理
查看>>
【JVM】JVM系列之内存模型(六)
查看>>
MySQL排序原理与案例分析
查看>>
RegexBuddy正则表达式工具
查看>>
rabbitmq 连接測试
查看>>
WPF控件 RichTextBox查找定位匹配字符
查看>>
etcd+calico集群的部署
查看>>
【Java并发编程】并发编程大合集-值得收藏
查看>>
tomcat7禁用catalina.out输出
查看>>
Symantec Backup Exec 报"Access denied to directory xxx" Error Code E0008488
查看>>