一般来说,对于一个n(n>1)级指针变量其内容是存放一个n-1级指针变量的地址。虽然y和z都是指针变量,但它们指向的变量是不同的,显然不能用同一层次的指针变量来表示。图8.5多级指针在存储系统中的关系在C语言中,用指针变量的级别来区分不同层次的指针变量。指向普通变量的称为一级指针变量,指向一级指针变量的称为二级指针变量,以此类推。而且,只要数据类型相同,任意级别的指针变量可以与普通变量、数组等一起定义。......
2023-11-20
指针数组是一组有序的指针的集合。指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。指针数组定义的一般形式为:
[存储类别符]数据类型符*数组名[常量表达式];例如,int*name[10];就定义了含有10个指针元素的指针数组,每一个指针数组元素都是一个整型的指针变量,即可以存放一个整型数据的地址(或者整型一维数组的始址)。例如,下面的语句序列所描述的指针数组与被指向数据对象之间的关系如图8.8所示。
图8.8 指针数组与被指向数据对象的关系示意图
指针数组也可以初始化,其形式如下:
[存储类别符]数据类型符*数组名[常量表达式]={地址量1,地址量2,…};
例如,int x,y,*add[]={&x,&y};和double a[10],b[35],*p[]={a,b};等。
指针数组在C程序中常用于处理二维数组,此时指针数组中的每个元素被赋予二维数组每一行的首地址,即每个指针数组元素指向一个一维数组(二维数组中的一行)。
【例8.13】 用一维指针数组处理二维数组示例。
上面程序在调用函数MakeArray生成二维数组后,通过循环使用表达式p[i]=a[i]将二维数组的每行首地址赋值给指针数组的元素,使得指针数组的每一元素指向二维数组中的一行;最后通过用*(p[i]+j)形式输出数组a的元素值。程序一次运行的结果为:
11 41 50 19 61
89 55 31 15 56
53 28 79 4 28
指针数组还常用于处理若干个相关的一维数组,此时指针数组中的每个元素指向一个一维数组的首地址。
【例8.14】 编写程序解决下述问题:5个学生,每人所学课程门数不同(成绩存放在一维数组中,以-1表示结束),输出他们的各门课程的成绩。(www.chuimin.cn)
上面程序综合使用了指针数组和二级指针变量,在数据对象的定义和初始化阶段完成后形成的处理结构如图8.9所示。
图8.9 例6.14程序的数据结构
二级指针变量p指向指针数组grad,而grad的每一个元素分别指向一个一维数组,最初时*p就等价于grad[0],也就是数组stu1的首地址。注意二级指针变量的每移动一步就指向grad的下一个数组元素,则*p就等价于当前所指向的指针数组元素,也就是指针数组元素指向的一维数组的首地址;对于*p而言,它仍然是一个指针变量,但它是一个一级指针变量,当其指向一个一维数组后,其每次移动就会指向下一个数组元素,程序中通过*p指针的移动并取指针运算(**p)来操作数组元素。程序的执行结果为:
学生1 成绩:78 98 73
学生2 成绩:100 98
学生3 成绩:88
学生4 成绩:100 78 33 65
学生5 成绩:99 88
有关C语言程序设计基础(第3版)的文章
一般来说,对于一个n(n>1)级指针变量其内容是存放一个n-1级指针变量的地址。虽然y和z都是指针变量,但它们指向的变量是不同的,显然不能用同一层次的指针变量来表示。图8.5多级指针在存储系统中的关系在C语言中,用指针变量的级别来区分不同层次的指针变量。指向普通变量的称为一级指针变量,指向一级指针变量的称为二级指针变量,以此类推。而且,只要数据类型相同,任意级别的指针变量可以与普通变量、数组等一起定义。......
2023-11-20
对一维数组的引用,既可以用传统的数组元素的下标法,也可使用指针的表示方法。例7.11输入10个数,采用指针变量表示的地址法输入输出数组各元素。由于数组元素在内存是连续存放的,若给指向整型变量的指针传递数组的首地址,则该指针指向二维数组。#include<stdio.h>例7.16用指针法输入输出二维数组各元素。......
2023-11-18
当指针变量指向一维数组的首元素时,称为指向了一维数组。所以,函数中一维数组形式参数可以用同类的指针形式参数替代;同理也可以用指向特定数组的指针变量来传递数组类实际参数。特别需要注意的是,函数的形式参数无论使用的是数组名形式还是指针变量形式,本质上都是一个指针变量,在被调函数中既可以将它当作数组名使用也可以将它当作指针变量使用。......
2023-11-20
图5.3指针变量指针变量本身也是变量,所以指针变量在使用之前也需要定义。为指针变量赋值的方法有两种:一种是定义后,使用赋值语句的方式;另外一种是定义的同时进行初始化方式。......
2023-11-20
例如,有如下所示的C语句序列:则结构体指针变量p1指向结构体数组元素a[2],其关系如图10.2所示。此时应该注意到被指针变量p1指向的结构体数组元素本身是不能作为整体操作的,所以*p1也不能作为整体操作。......
2023-11-20
,常数n};例如:int a1[5]={1,2,3,4,5};一维数组的初始化可以用以下方法实现:①数组初始化时,给出全部数组元素的初始值。②输出数组元素值。......
2023-11-20
还可以在枚举类型定义中对枚举元素起始值作多次改变,每次改变后枚举值从该处开始递增直到遇到下一次起始值的指定为止。枚举数据类型定义完成后,仍然需要定义枚举变量才能使用,常见的方法有:①先定义枚举类型,然后定义枚举变量。枚举变量的输入输出示例。......
2023-11-20
从二维数组的角度看,数组名array 代表整个二维数组的首地址,也是第0 行的首地址。所以,&array[i]和array+i 等价,都是指向二维数组的第i 行。array[i]+j 指向二维数组array[i][j]。*就是数组元素 array[i][j]的值。计算 array[i][j]在数组中的相对位置为“i×m+j”,*就是数组array[i][j]的值。使用指针变量输出二维数组任一行任一列元素的值。图6.12程序运行结果说明:在主函数中定义了一个指针变量p,指向数组array 第0 行第0 列。p+是二维数组array 第i 行第j 列的地址。......
2023-10-21
相关推荐