您的位置:首页 > 编程语言 > C语言/C++

【C语言入门教程】4.5 指针变量的定义与引用

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

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 指向整型变量 i
pc = &c;				// 将字符型指针变量 *pc 指向字符型变量 c
pf = &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 个运算符都是一元运算符,它们的优先级仅次于一元算术运算符。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: