首页 理论教育 C语言指针变量类型说明及使用

C语言指针变量类型说明及使用

时间:2023-10-27 理论教育 版权反馈
【摘要】:对指针变量的类型说明包括3 个内容:图7.1数据存储区域①指针类型说明,即变量名前面的“*”是一个说明符,用来说明该变量是指针变量,这个“*”是不能省略它定义变量为一个指针变量。类型名表示指针变量所指向的变量的类型,而且只能指向这种类型的变量,因为它决定了指针的访问范围。未经赋值的指针变量不能使用,否则将造成系统混乱,甚至死机。例7.3指针的引用。例7.4交换两个数。

C语言指针变量类型说明及使用

任务描述

将介绍C语言的一个重要组成部分——指针。指针是在C语言中广泛使用的一种数据类型。运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构;能很方便地使用数组字符串;并能像汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了C语言的功能。学习指针是学习C语言中最重要的一环,能否正确理解和使用指针是人们是否掌握C语言的一个标志。在掌握了指针的基本用法之后,将更进一步讨论指针的高级用法。

知识学习

(1)地址和指针

在计算机中,所有的数据都是存放在存储器中的。一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占4 个单元,字符量占1 个单元等,为了正确地访问这些内存单元,必须为每个内存单元编上号。根据一个内存单元的编号即可准确地找到该内存单元。内存单元的编号也称为地址。所以根据内存单元的编号或地址就可以找到所需的内存单元。

当C 程序中定义一个变量时,系统就分配一个带有唯一地址的存储单元来存储这个变量。例如,若有下面的变量定义:

char a='A';

int b=66;

long c=67;

系统将根据变量的类型,分别为a、b 和c 分配1 个、4 个和4 个字节的存储单元,此时变量所占存储单元的第一个字节的地址就是该变量的地址。

程序对变量的读取操作(即变量的引用),实际上是对变量所在存储空间进行写入或取出数据。通过变量名来直接引用变量,称为变量的“直接引用”方式,这种引用方式是由系统自动完成变量名与其存储地址之间的转换。

此外,C语言中还有另一种称为“间接引用”的方式。它首先将变量的地址存放在一个变量(存放地址的变量称为指针变量)中,然后通过存放变量地址的指针变量来引用变量,如图7.1所示。

int x=123;

int y=456;

int z=789;

int*point=&x;

在C语言中一个变量的地址称为该变量的指针。用来存放一个变量地址的变量称为指针变量。即指针是一个特殊变量,它是用来存放其他变量的地址的。其实,一个指针总是一个无符号整数类型,因为计算机的内存编号总是整型的,而且不会是负数。

(2)指针变量

1)指针变量的定义

指针变量同其他变量一样,必须先定义,后使用。指针变量定义的一般形式为:

类型名*指针变量名;

例如: int *p;

表示p 是一个指针变量,它的值是某个整型变量的地址。或者说p 指向一个整型变量。至于p 究竟指向哪一个整型变量,应由向p 赋予的地址来决定。

对指针变量的类型说明包括3 个内容:

图7.1 数据存储区域

①指针类型说明,即变量名前面的“*”是一个说明符,用来说明该变量是指针变量,这个“*”是不能省略它定义变量为一个指针变量。

②指针变量名。

③变量的数据类型。类型名表示指针变量所指向的变量的类型,而且只能指向这种类型的变量,因为它决定了指针的访问范围。将在其后的内容中进一步介绍指针变量定义类型的必要性。

指针变量也允许在定义时进行初始化。例如:

float *ptr,percent=12.80;

ptr=&percent

ptr 的值为变量percent 的地址时,可以说指针变量p 指向该变量。

通过上述操作可以得到如下关系:

percent 等价*ptr(www.xing528.com)

&percent 等价ptr

percent=12.80 等价*ptr=12.80

例7.2 指针的基本用法。

2)指针变量的运算

指针变量有两个有关的运算符:

①& 取地址运算符。指针变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值。未经赋值的指针变量不能使用,否则将造成系统混乱,甚至死机。指针变量的赋值只能赋予地址,决不能赋予任何其他数据,否则将引起错误。在C语言中,变量的地址是由编译系统分配的,对用户完全透明,用户不知道变量的具体地址。C语言中提供了地址运算符&来表示变量的地址。其一般形式为:

&变量名;

如&a 变示变量a 的地址,&b 表示变量b 的地址。变量本身必须预先说明。设有指向整型变量的指针变量p,如要把整型变量a 的地址赋予p 可以有以下两种方式:

被赋值的指针变量前不能再加“*”说明符,如写为*p=&a 也是错误的。

②*指针运算符。取内容运算符*是单目运算符,其结合性为自右至左,用来表示指针变量所指的变量。在*运算符之后跟的变量必须是指针变量。

需要注意的是指针运算符*和指针变量说明中的指针说明符*不是一回事。在指针变量说明中,“*”是类型说明符,表示其后的变量是指针类型。而表达式中出现的“*”则是一个运算符用以表示指针变量所指的变量。

例如:&a 表示变量a 的地址,*p 表示对指针变量p 指向的变量的内存单元所进行的操作。

例7.3 指针的引用。

3)指针变量作为函数参数

在C语言中,函数参数可以是指针类型。当指针变量作函数参数,其作用是将一个变量的地址传送到另一个函数中。此时形参从实参获得了变量的地址,即形参和实参指向同一个变量,当形参指向的变量发生变化时,实参指向的变量也随之变化。

例7.4 交换两个数。

任务总结

指针就是地址,是指某数据在内存中存储空间的首字节的编号。

指针的作用:可以用来对程序中变量和数组等对象实现间接访问。如果要实现对数据的间接访问,必须已知数据在内存中的地址(指针)。

间接访问:例如让同学给你带个饭,中学上课传纸条。

关于*

①乘法:a*b;

②说明:必须在定义语句中,如:double *p;

③指向运算符:在定义语句以外,和*结合。*右边必须是指针!

如果有double r;double *p; p=&r; ,则有结论:

①p 等价于&r

②*p 等价于*&r

③*p 等价于r

④*&相遇抵消。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈