图5.3指针变量指针变量本身也是变量,所以指针变量在使用之前也需要定义。为指针变量赋值的方法有两种:一种是定义后,使用赋值语句的方式;另外一种是定义的同时进行初始化方式。......
2023-11-20
在确定指针变量指向某一变量之后,原来对变量的操作也可以用指针变量进行。
1.指针运算符
(1)取地址运算符&。
取地址运算符&是一个单目运算符,结合性自右而左,功能是取变量的地址。
格式:
功能:运算结果是该变量的首地址。
(2)取内容运算符*。
取内容运算符*,又称间接引用运算符,结合性自右而左,用来表示指针变量所指的变量。运算符*后面的变量必须是指针变量。
格式:
功能:取指针变量所指向的变量的值。
说明:取内容运算符“*”与前面定义指针变量时的“*”意义不同。指针变量定义时,“*”仅表示其后的变量是指针类型变量。而取内容运算符*是一个运算符,运算后的值是指针变量所指的变量的值。例如:
这里语句*p=10 有两层含义:首先从指针变量p 中取值,即变量i 的地址;然后在该地址标识的内存单元中存入数据10,如图6.2 所示。
图6.2 取指针变量p 所指的变量中存放的值
【例6.2】通过指针变量访问整型变量。程序如下:
程序运行结果如图6.3 所示。
图6.3 程序运行结果
【例6.3】通过程序显示指针与其所指向的变量之间的关系。程序如下:
程序运行结果如图6.4 所示。
图6.4 程序运行结果(www.chuimin.cn)
说明:
(1)&i 是变量i 的地址,p 指向变量i,因此p 中存放i 的地址,所以在程序中第1 个和第2 个printf 语句输出的都是i 的地址。而*p 是P 指向地址中存放的数,即i 的值。
(2)&*p 运算顺序是,先执行*P,可得到指向地址中存放的值,即i 的值。然后执行&*P,即&i,所以&*p 的运算结果是变量i 的地址。
(3)*&p 运算顺序是,先执行&p,可得p 的地址,然后执行*&p,得到p 的内容,即变量i 的地址,所以*&p 的运算结果也是变量i 的地址。
2.指针变量的算术操作
在C 语言中,允许指针的算术操作只有加法和减法。
例如int n,*p;则表达式p+n 指向的是p 所指的数据存储单元之后的第n 个存储单元,其中数据存储单元的大小与数据类型有关,如图6.5 所示。
图6.5 指针的算术操作
若设指针变量p 的值为2000,对于整型数据,其长度是2 个字节。则表达式p++的运算结果为2002,而不是2001。因为p 增量后,要指向下一数据存储单元。
注意:地址的值可以用2011、2012 等十进制的数表示,也可以用2000H、2001H 等十六进制的数表示。
3.指针变量的增减量运算
在C 语言中,当指针变量指向某一连续存储单元时,可以对指针变量进行++,--运算,达到移动指针的目的。例如:
*p++的操作是先取指针p 的值,然后再将p+1 赋给p,最后对p 取*运算。
*p--的操作也是先取指针p 的值,然后再将p-1 赋给p,最后对p 取*运算。
4.指针变量的应用
【例6.4】输入两个整型数据a 和b,按升序输出,使用指针变量求解。程序如下:
程序运行结果如图6.6 所示。
图6.6 程序运行结果
说明:
(1)定义了三个指针变量p1、p2 和p,在比较和交换的过程中不是交换变量a 和b 的值,而是交换指针变量p1 和p2 的值。然后,通过指针变量升序输出。
(2)最初指针变量p1 和p2分别指向变量a 和b。当a 大于b 时,交换指针,使指针变量p1 指向b,p2 指向a,交换过程如图6.7 所示。
图6.7 指针变量p1 和p2 交换前后的指针方向
有关C语言程序设计实用教程的文章
图5.3指针变量指针变量本身也是变量,所以指针变量在使用之前也需要定义。为指针变量赋值的方法有两种:一种是定义后,使用赋值语句的方式;另外一种是定义的同时进行初始化方式。......
2023-11-20
图8.1函数内存映射方式1.指向函数指针变量的定义C语言中可以定义指针变量来存储函数的首地址,并利用该指针变量对函数进行调用。指向函数的指针变量的真正作用是作为函数参数使用,使程序在功能的实现上具有更大的灵活性。指向函数的指针变量求最大值、最小值和两数之和。......
2023-11-20
在C语言中,二维数组是由一维数组作元素的一维数组。当需要用指针指向二维数组时,可以采用一级指针变量和二级指针变量两种处理形式。表8.3指向若干元素构成的一维数组指针变量表示二维数组元素使用指向由若干个元素组成的一维数组的指针处理二维数组。......
2023-11-20
图8.3用指针修改数组元素的值使用指针变量表示数组元素示例。另外,在输出数组值的操作中,首先让指针变量p指向数组0号元素,然后通过循环控制中的p++运算,使得指针变量p依次指向a数组的其他元素,通过*p的方式表达数组元素值。程序执行的结果为:0010000如果有两个指针变量分别指向同一个数组的两个不同元素,则两个指针变量之间的距离表示了它们之间的差距有多少个数组元素。......
2023-11-20
指向结构体变量的指针变量叫结构体类型指针变量,其定义方式、使用方法与指向基本变量的方法相同。使用结构体指针变量时还需要特别注意,结构体变量的地址与结构体变量成员的地址是不同的。已知某学生3门课程的成绩存放在一个结构体变量中,请设计一个独立的函数计算该学生的平均成绩,要求函数使用结构体指针变量做函数的形式参数。......
2023-11-20
void类型指针中的数据不能访问,如果非要访问的话,可以通过强制转换将void类型指针转换为与所指向的数据类型相符的类型。所谓“相同存储对齐限制”是指void类型指针所指的数据在内存中所占的长度与显式转换后的指针所指的数据在内存中所占的长度相等。同理,如果是将void类型转换为具有更小存储对齐限制的指针时,也可能引起数值的改变。......
2023-11-18
指针变量不同于其他类型的变量,它是专门存放地址的,必须将其定义为“指针类型”。]其中数据类型指的是指针变量指向数据的类型,即指针所指向的数据可以是整型、字符型或实型数等。图7.1指针变量的初始化事实上,指针变量必须被赋值语句初始化后才能使用,否则严重时会造成系统区破坏而死机。......
2023-11-18
对一维数组的引用,既可以用传统的数组元素的下标法,也可使用指针的表示方法。例7.11输入10个数,采用指针变量表示的地址法输入输出数组各元素。由于数组元素在内存是连续存放的,若给指向整型变量的指针传递数组的首地址,则该指针指向二维数组。#include<stdio.h>例7.16用指针法输入输出二维数组各元素。......
2023-11-18
相关推荐