当指针变量指向一维数组的首元素时,称为指向了一维数组。所以,函数中一维数组形式参数可以用同类的指针形式参数替代;同理也可以用指向特定数组的指针变量来传递数组类实际参数。特别需要注意的是,函数的形式参数无论使用的是数组名形式还是指针变量形式,本质上都是一个指针变量,在被调函数中既可以将它当作数组名使用也可以将它当作指针变量使用。......
2023-11-20
定义结构体类型指针变量后,既可以使用该指针变量指向结构体数组元素,也可以使用其指向结构体数组,该指针变量的值有两种情况:当该指针变量指向结构体数组元素时,表示该结构体数组元素的地址;当该指针指向结构体数组时,表示该结构体数组的首地址。
例如,有如下所示的C语句序列:
则结构体指针变量p1指向结构体数组元素a[2],其关系如图10.2所示。当需要表示指针变量所指向的数组元素值时,使用星号(*)运算符。此时应该注意到被指针变量p1指向的结构体数组元素(结构体变量)本身是不能作为整体操作的,所以*p1也不能作为整体操作。如果要使用p1指针为其指向的结构体数组元素a[2]的成员x赋值时,可以使用如下所示的两种形式:
(*p1).x=100;
p1->x=100;
如果结构体指针变量(例如,指针变量p2)指向结构体数组,并且指针并没有移动,其关系如图10.3所示。此时可以使用p2+i的形式来表示结构体数组i号元素的地址,用*(p2+i)来表示结构体数组的i号元素。此时如果要用指针变量来表示数组元素成员x的值,可以使用下面两种形式:
(p2+i)->x
(*(p2+i)).x
图10.2 指针变量指向数组元素
图10.3 指针变量指向数组
【例10.10】 编写程序实现功能:统计并输出年龄在18岁以上的学生人数。
程序执行时,首先通过指向结构体数组stu的指针变量输入了结构体数组的数据,然后将数组传递到函数ptstu进行输出操作,操作时使用了两种通过指向结构体数组指针变量表示数组元素成员的方式:(s+i)->name或(*(s+i)).age。程序一次执行过程和运行结果如下:
请依次输入学生数据信息:
20141001//以下是输入数据
李胜男(www.chuimin.cn)
18
20141002
张杰
17
20141003
魏小杰
19
年龄大于18岁的学生人数有:2人。 //输出数据
有关C语言程序设计基础(第3版)的文章
当指针变量指向一维数组的首元素时,称为指向了一维数组。所以,函数中一维数组形式参数可以用同类的指针形式参数替代;同理也可以用指向特定数组的指针变量来传递数组类实际参数。特别需要注意的是,函数的形式参数无论使用的是数组名形式还是指针变量形式,本质上都是一个指针变量,在被调函数中既可以将它当作数组名使用也可以将它当作指针变量使用。......
2023-11-20
图5.7两层函数嵌套调用示意图函数的嵌套调用即一个函数在被调用的过程中又调用了另外的一个函数。函数fac和powers的返回值类型均被设计为double型,其主要目的是为了避免n!x:0.5//0.5从键盘输入的数据0.50 powers of e=1.648721//程序执行结果......
2023-11-20
针对不同的实际应用,数据排序方法有很多种。本节介绍两种常用排序方法的基本思想和实现方法,帮助读者初步理解排序方法的计算机解决思路。②不考虑已排好序的数据,将剩下的数据作为待排序列。编写程序实现冒泡排序算法,对随机生成的10个3位整数按升序进行排序并输出。......
2023-11-20
指针数组是一组有序的指针的集合。用一维指针数组处理二维数组示例。程序一次运行的结果为:11415019618955311556532879428指针数组还常用于处理若干个相关的一维数组,此时指针数组中的每个元素指向一个一维数组的首地址。上面程序综合使用了指针数组和二级指针变量,在数据对象的定义和初始化阶段完成后形成的处理结构如图8.9所示。......
2023-11-20
void类型指针中的数据不能访问,如果非要访问的话,可以通过强制转换将void类型指针转换为与所指向的数据类型相符的类型。所谓“相同存储对齐限制”是指void类型指针所指的数据在内存中所占的长度与显式转换后的指针所指的数据在内存中所占的长度相等。同理,如果是将void类型转换为具有更小存储对齐限制的指针时,也可能引起数值的改变。......
2023-11-18
若在表中找不到与给定条件相符合的数据,则称为不成功的查找,给出提示信息或空位置信息。本节介绍最常用的两种查找方法:顺序查找和折半查找。③基准位置数据值与查找的关键字值不相符时,在两个子集合中选取一个,重复执行①、②,直到被处理的查找集合中没有数据为止。图6.11是在一有序序列中实现对key=21进行折半查找的过程。......
2023-11-20
一个函数直接或间接地调用自己,称为函数的递归调用。所以函数递归调用的实现必须依靠系统提供一个特殊部件(堆栈)存放未完成的操作,以保证当递归调用结束回溯时不会丢失任何应该执行而没有执行的操作。为了理解函数递归调用的特性,参照例5.9的程序讨论函数递归调用的执行过程,为了讨论方便为程序加上行号。函数递归调用示例。......
2023-11-20
图6.3二维数组a[3][4]示意图多维数组定义的一般形式为:数据类型符数组名[常量表达式][常量表达式]…图6.4二维数组存储示意图图6.5三维数组存储示意图根据多维数组在存储器中按行存储的规则和多维数组的行列顺序可以计算出多维数组元素存储时在线性连续存储单元中的排列序号。......
2023-11-20
相关推荐