理论教育 C语言程序设计教程:赋值操作指针变量

C语言程序设计教程:赋值操作指针变量

时间:2023-11-21 理论教育 版权反馈
【摘要】:指针变量的值是指针本身存储的数值,这个值将被编译器当作一个地址。指针变量同普通变量类似,在使用之前不仅要定义说明,而且必须赋予具体的值(初始化)。未经赋值的指针变量不能直接使用,否则会造成系统混乱,甚至系统崩溃。指针变量赋值只能赋予地址,绝不能赋予其他数据,否则会引起错误或程序混乱。例如,上例中的指针变量p与q。

C语言程序设计教程:赋值操作指针变量

(1)指针变量的值。指针变量的值是指针本身存储的数值,这个值将被编译器当作一个地址。在Microsoft Visual C ++2010学习版环境下,所有类型指针的值都是一个32位整数(二进制)。指针所指向的内存区是从指针的值所代表的那个内存地址开始的一段连续的内存区。

(2)取地址操作符&。定义一个变量时,系统为该变量分配一定的存储空间(大小由定义类型决定)。如果程序中要用到该变量的地址信息该如何操作?C语言提供了取地址操作符&,用于返回程序中实体(如变量、数组、函数等)的地址信息。其一般形式为:

例如:

int a; //定义整型变量

&a; //取变量的地址操作

(3)指针变量的赋值。指针变量同普通变量类似,在使用之前不仅要定义说明,而且必须赋予具体的值(初始化)。未经赋值的指针变量不能直接使用,否则会造成系统混乱,甚至系统崩溃。

指针变量赋值只能赋予地址,绝不能赋予其他数据,否则会引起错误或程序混乱。需要通过取地址操作符来完成,主要有以下两种方式。

1)指针变量初始化的方法

2)赋值语句的方法

也可以将已赋值(或初始化)的指针变量再赋值给未赋值的指针变量(同类型之间赋值)。

例如:

int a=25;

int *p, *q;

p =&a;

q =p;

其功能是先定义整型变量a和指针变量p,q,然后把a的地址赋值给指针变量p,最后将指针变量p的值(变量a的地址)赋值给指针变量q,故p和q都指向了变量a,指针变量p,q与变量a的关系如图9-3所示。

注意:

(1)原则上一个已定义的指针变量只能指向同类型的变量。例如,上例中的指针变量p与q。

(2)如果需要不同类型赋值时,需要进行强制类型转换。例如:

int a; //定义整型变量(www.daowen.com)

int * pInt; //定义指向整型变量的指针变量

char * pChar; //定义指向字符型变量的指针变量

pInt = &a; // pInt指向a

pChar = ( char * ) pInt; //强制类型转换,通过赋值使pChar也指向a

图9-3 指针变量p,q与变量a的关系

虽然pInt和pChar都指向了变量a,但二者引用变量a所对应的存储单元的值是不同的,通过pChar只能访问变量a的首字节单元,而pInt则可以访问变量a的整段存储单元。

例9.1 输出变量的地址。

编写程序:

创建一个名为“eg9_1.c”的新文件,在编辑窗口中输入下面的程序代码。

运行结果:

程序说明:

本程序首先定义float类型变量f和指针变量pf,通过pf=&f实现指针变量初始化,也就是该指针指向变量f。指针变量pf中存放的是变量f的地址,通过输出语句可以输出变量及其内存地址,说明了变量和指针变量的不同。

例9.2 利用指针输出变量的值和地址。

编写程序:

创建一个名为“eg9_2.c”的新文件,在编辑窗口中输入下面的程序代码。

运行结果:

程序说明:

本程序首先定义整型变量s和指针变量pt,通过pt = &s实现指针变量初始化,通过printf()函数输出变量的值及其内存地址。说明&s与指针变量pt都可以表示变量s的地址,s和*pt都可以表示变量s的值。

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

我要反馈