指向多维数组的指针和指针变量

上传人:j****9 文档编号:47049716 上传时间:2018-06-29 格式:DOC 页数:7 大小:55KB
返回 下载 相关 举报
指向多维数组的指针和指针变量_第1页
第1页 / 共7页
指向多维数组的指针和指针变量_第2页
第2页 / 共7页
指向多维数组的指针和指针变量_第3页
第3页 / 共7页
指向多维数组的指针和指针变量_第4页
第4页 / 共7页
指向多维数组的指针和指针变量_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《指向多维数组的指针和指针变量》由会员分享,可在线阅读,更多相关《指向多维数组的指针和指针变量(7页珍藏版)》请在金锄头文库上搜索。

1、一、一、 指向多维数组的指针和指针变量指向多维数组的指针和指针变量1.多维数组的地址 设有整型二维数组 a34如下:0 1 2 34 5 6 7 8 9 10 11 它的定义为:int a34=0,1,2,3,4,5,6,7,8,9,10,11 设数组 a 的首地址为 1000,各下标变量的首地址及 其值如图所示。前面介绍过,语言允许把一个二维数组分解为多个一维数组来处理。因此数组 a 可分解 为三个一维数组,即 a0,a1,a2。每一个一维数组又含有四个元素。例如 a0数组,含有 a00,a01,a02,a03四个元素。 数组及数组元素的地址表示如下: 从二维数组的角度来看,a 是二维数组名

2、,a 代表整个二维数组的首地址,也是二维数组 0 行的首地址,等于 1000。a+1 代表第一行的首地址,等于 1008。如图:a0是第一个一维数组的数组名和首地址,因此也为 1000。*(a+0)或*a 是与 a0等效的,它表示一维数组 a00 号元素的首地址,也为 1000。printf(“%d,“,a);printf(“%d,“,*a);printf(“%d,“,a0);printf(“%d,“,printf(“%dn“,printf(“%d,“,a+1);printf(“%d,“,*(a+1);printf(“%d,“,a1);printf(“%d,“,printf(“%dn“,pri

3、ntf(“%d,“,a+2);printf(“%d,“,*(a+2);printf(“%d,“,a2);printf(“%d,“,printf(“%dn“,printf(“%d,“,a1+1);printf(“%dn“,*(a+1)+1);printf(“%d,%dn“,*(a1+1),*(*(a+1)+1); 2.指向多维数组的指针变量 把二维数组 a 分解为一维数组 a0,a1,a2之后,设 p 为指向二维数组的指针变量。可 定义为:int (*p)4 它表示 p 是一个指针变量,它指向包含 4 个元素的一维数组。若指向第一个一维数组 a0, 其值等于 a,a0,或int(*p)4;int

4、 i,j;p=a;for(i=0;i%sn“,i,ps); char *day_name(char *name,int n) char *pp1,*pp2;pp1=*name;pp2=*(name+n);return(n7)? pp1:pp2); 【例 10.35】输入 5 个国名并按字母顺序排列后输出。现编程如下:#include“string.h“ main()void sort(char *name,int n);void print(char *name,int n);static char *name= “CHINA“,“AMERICA“,“AUSTRALIA“,“FRANCE“,“

5、GERMAN“;int n=5;sort(name,n);print(name,n); void sort(char *name,int n)char *pt;int i,j,k;for(i=0;i0) k=j;if(k!=i)pt=namei;namei=namek;namek=pt; void print(char *name,int n)int i;for (i=0;in;i+) printf(“%sn“,namei); 说明: 在以前的例子中采用了普通的排序方法,逐个比较之后交换字符串的位置。交换字符串的 物理位置是通过字符串复制函数完成的。反复的交换将使程序执行的速度很慢,同时由于各

6、字 符串(国名)的长度不同,又增加了存储管理的负担。用指针数组能很好地解决这些问题。把所 有的字符串存放在一个数组中,把这些字符数组的首地址放在一个指针数组中,当需要交换两 个字符串时,只须交换指针数组相应两元素的内容(地址)即可,而不必交换字符串本身。 本程序定义了两个函数,一个名为 sort 完成排序,其形参为指针数组 name,即为待排序 的各字符串数组的指针。形参 n 为字符串的个数。另一个函数名为 print,用于排序后字符串 的输出,其形参与 sort 的形参相同。主函数 main 中,定义了指针数组 name 并作了初始化赋 值。然后分别调用 sort 函数和 print 函数完

7、成排序和输出。值得说明的是在 sort 函数中,对 两个字符串比较,采用了 strcmp 函数,strcmp 函数允许参与比较的字符串以指针方式出现。 namek和 namej均为指针,因此是合法的。字符串比较后需要交换时,只交换指针数组元素 的值,而不交换具体的字符串,这样将大大减少时间的开销,提高了运行效率。10.1.1指向指针的指针指向指针的指针如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指 针变量。 在前面已经介绍过,通过指针访问变量称为间接访问。由于指针变量直接指向变量,所以 称为“单级间址” 。而如果通过指向指针的指针变量来访问变量则构成“二级间址”

8、 。从下图可以看到,name 是一个指针数组,它的每一个元素是一个指针型数据,其值为地址。 Name 是一个数据,它的每一个元素都有相应的地址。数组名 name 代表该指针数组的首地址。 name+1 是 manei的地址。name+1 就是指向指针型数据的指针(地址) 。还可以设置一个指针 变量 p,使它指向指针数组元素。P 就是指向指针型数据的指针变量。 怎样定义一个指向指针型数据的指针变量呢?如下:char *p; p 前面有两个*号,相当于*(*p)。显然*p 是指针变量的定义形式,如果没有最前面的*,那就是 定义了一个指向字符数据的指针变量。现在它前面又有一个*号,表示指针变量 p

9、是指向一个 字符指针型变量的。*p 就是 p 所指向的另一个指针变量。 从下图可以看到,name 是一个指针数组,它的每一个元素是一个指针型数据,其值为地 址。name 是一个数组,它的每一个元素都有相应的地址。数组名 name 代表该指针数组的首地 址。name+1 是 manei的地址。name+1 就是指向指针型数据的指针(地址) 。还可以设置一个 指针变量 p,使它指向指针数组元素。P 就是指向指针型数据的指针变量。如果有:p=name+2; printf(“%on”,*p); printf(“%sn”,*p); 则,第一个 printf 函数语句输出 name2的值(它是一个地址)

10、,第二个 printf 函数语句以字 符串形式(%s)输出字符串“Great Wall” 。 【例 10.36】使用指向指针的指针。main()char *name=“Follow me“,“BASIC“,“Great Wall“,“FORTRAN“,“Computer desighn“;char *p;int i;for(i=0;i5;i+)p=name+i;printf(“%sn“,*p);说明: p 是指向指针的指针变量。 【例 10.37】一个指针数组的元素指向数据的简单例子。main()static int a5=1,3,5,7,9;int *num5=int *p,i;p=num;for(i=0;i5;i+)printf(“%dt“,*p);p+;说明:指针数组的元素只能存放地址。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 初中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号