在C++中,数组和指针密切相关,几乎可以互相使用。数组名字可以认为是常量指针,它指向存放数组第一个元素的内存地址。指针可以用于完成任何涉及数组下标的操作。实际上,数组下标表示法在编译期间将转换为指针表示法,所以用指针方式来书写数组下标表达式可以节省编译时间。如果再定义一个字符指针:char*pname=name;则name[i]、*和*具有相同的值,都是数组第i+1个元素的值。分析以下程序的执行结果。......
2023-11-07
1.【例4-27】 取地址中的内容运算
(1)编辑C语言源程序
(2)编译
(3)执行
程序执行后,P1=00110110=0x36。这里为了区别不同的指针变量定义,*p是不能省略的,在*p后面加入一个字符写为*pa,或写为*pb *px 等。
本例中的程序证明,*pa的运算结果就是a值。因为a的地址是由C语言编译器决定的,无需用户参与。
(4)程序点评
本例执行的结果,证明了取地址运算符和取地址中数据运算符的运算结果。
2.【例4-28】 指针法读取数组内容
(1)编辑C语言源程序
由于pa=a(即pa=&a[0]),也就是将数组a[0]的地址赋予pa,下面关系成立:
(2)编译
(3)执行
1)软仿真。进入仿真,单步执行,当i=0时,c=0x02,d=0x02,P1=00000010=02。可以观察变量及P1输出。
当i=1、2、3时,其输出与数组对应值相同。此例证明直接用数组取值与用指针法数组取值完全相同,即变量c与d是同一个值。
2)下载到实验机。程序执行后,应可以在P1口看到数组内容的变化。
(4)程序点评
本例验证了数组与指针的关系。pa=a就是pa=&a[0],从而得到数组的元素内容,与直接用数组运算是一致的。
3.【例4-29】 用地址作为函数的传送变量(www.chuimin.cn)
(1)编辑C语言源程序
(2)编译
(3)执行
软仿真
1)进入仿真,单击“跟踪”。
2)变量运算结果及P1口显示证明,程序正确执行。
(4)程序点评
函数add(x,y)中,x,y是函数的实参,也是变量a、b的地址。主调函数将此地址变量传送到add()函数的形参*w和*z,在函数中再取地址的内容到变量a、b,并进行加法运算,将结果通过返回值c返回到主函数,并在P1口显示结果。
这是一个简单例子,用以说明用地址作为形参进行函数间数据传送。
4.【例4-30】 用数组名作为函数的传送变量
(1)编辑C语言源程序
(2)编译
(3)执行
1)进入软仿真,单击“跟踪”执行。
2)输出加法运算结果到P1,P1=00001010=0×0A=10。
(4)程序点评
这里,函数传送的实参是一个包括一系列实数的数组a[ ]。实际上是将&a[0]首地址传送给被调函数的形参*f。当被调函数有了首地址,就可以按数组地址的变化*(g+i)调出其中的数据内容s,进行加法运算。完成后,返回s,并传送到主函数,输出到P1。注意,虽然主函数中的变量名s与返回值s同名,但仍然是两个独立的变量,必须在主函数及子函数中分别定义。这一点也是C语言的特点和优点。
有关零起点学习单片机多语言编程的文章
在C++中,数组和指针密切相关,几乎可以互相使用。数组名字可以认为是常量指针,它指向存放数组第一个元素的内存地址。指针可以用于完成任何涉及数组下标的操作。实际上,数组下标表示法在编译期间将转换为指针表示法,所以用指针方式来书写数组下标表达式可以节省编译时间。如果再定义一个字符指针:char*pname=name;则name[i]、*和*具有相同的值,都是数组第i+1个元素的值。分析以下程序的执行结果。......
2023-11-07
例如,有如下所示的C语句序列:则结构体指针变量p1指向结构体数组元素a[2],其关系如图10.2所示。此时应该注意到被指针变量p1指向的结构体数组元素本身是不能作为整体操作的,所以*p1也不能作为整体操作。......
2023-11-20
指针数组是一组有序的指针的集合。用一维指针数组处理二维数组示例。程序一次运行的结果为:11415019618955311556532879428指针数组还常用于处理若干个相关的一维数组,此时指针数组中的每个元素指向一个一维数组的首地址。上面程序综合使用了指针数组和二级指针变量,在数据对象的定义和初始化阶段完成后形成的处理结构如图8.9所示。......
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
当监护人认为操作人站立位置正确,使用的安全用具合乎要求时,监护人按操作票的顺序及内容高声“唱票”,操作人应再次核对设备的名称和编号,确认无误后,复诵一遍,监护人确认无误后,发出命令“对,执行”。已执行的操作票保存3个月。发令人认可后,由操作人在操作票上盖“已执行”图章。......
2023-06-24
所以,程序中可以用数据类型相同的一级指针变量来指向任意维数数组的元素。定义二维数组和合适的指针变量后,则可以使用指针变量指向数组中的任何一个元素。如果一个指针变量已经指向了一个数组元素,对指针变量进行指针运算就表示被它指向的那个数组元素。随机产生4行5列二维数组的元素值,找出其中的最小值。要求在查找过程中使用指针变量遍历二维数组。......
2023-11-20
对一维数组的引用,既可以用传统的数组元素的下标法,也可使用指针的表示方法。例7.11输入10个数,采用指针变量表示的地址法输入输出数组各元素。由于数组元素在内存是连续存放的,若给指向整型变量的指针传递数组的首地址,则该指针指向二维数组。#include<stdio.h>例7.16用指针法输入输出二维数组各元素。......
2023-11-18
相关推荐