当前位置:
文档之家› C语言程序设计第45讲 指向一维数组的指针变量
C语言程序设计第45讲 指向一维数组的指针变量
C Programming Language
上述程序也可采用指针变量作sub_max函数的形式参数。 main() { int i,a[10],*pt=a,max; printf("please input array a:\n"); for(i=0;i<10;i++) int sub_max(int *b,int n) scanf("%d",&a[i]); { max=sub_max(pt,10); int temp,i; printf("max=%d\n",max); temp=b[0]; /*b[i]等价于*(b+i)*/ } for(i=1;i<n;i++) if(temp<b[i]) temp=b[i]; return temp;
#include <stdio.h> main() { int i,a[10],*pt=a,max; printf("please input array a:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); max=sub_max(pt,10); printf("max=%d\n",max); }
pa=&a[0];
/*或者 pa=a;*/
• 一个指针变量可以指向一个数组元素 int *ptr,data[10]; ptr=data+3; /*或者ptr=&data[3]*/
C Programming Language
假设pt指向了一维数组a,那么C语言规定指针对数组的
表示方法有如下几种。
⑴pt+n与a+n表示数组元素a[n]的地址,
即&a[n]。 • 若指针变量pt已指向数组中的一个元素, 则pt+1指向同一数组中的下一元素。 • pt+1所代表的地址值是pt+1×d,d是每 个数组元素所占的字节数。
pt+n
数组a
pt
pt+1
a[0] a[1] a[2]
……
a a+1 a+2
pt+2
a[n]
a+n
C Programming Language
理成*(a+i)。
• []在C语言中是“变址运算符”,
即将a[i]按a+i计算出地址,然后 找出该地址单元的值。
*(pt+n)a[n] Nhomakorabea*(a+n)
C Programming Language
假设pt指向了一维数组a,那么C语言规定指针对数组的
表示方法有如下几种。 ⑶指向数组的指针变量也可用数组的下标形式表示为pt[n], 其效果相当于*(pt+n)。
C Programming Language
数组指针作函数参数
• 数组名就是数组的首地址,实参向形参传送数组名实际上
就是传送数组的地址,形参得到该地址后也指向同一数组。
• 指针变量的值也是地址,也可以作为函数的参数进行传递。
C Programming Language
【例2】求一维数组中的最大值,要求求最大值的功能通过 函数实现。
学习目标
(1)掌握指向一维数组的指针的用法。
(2)掌握指向数组的指针作为函数参数传递的用法。
指针与数组
指针与数组的关系十分密切,数组名本身就是一个常量指
针。当定义数组时,其首地址就已确定不再改变。
例如,对于数组arr[10],数组名arr等效于地址&arr[0]。因此,
可以将数组名arr看做一个指针,它永远指向arr[0]。
程序运行结果: 0 1
2
3
4
5
6
7
8
9
C Programming Language
指针变量与自增自减运算符同时出现时的用法
⑴ *p++等价于*(p++)。若p当前指向a数组中的第i个元素, 则*(++p)相当于a[++i],*(p--)相当于a[i--];;*(--p)
相当于a[--i]。
⑵ *(p++) 与 *(++p) 作用不同。若 p 的初值为 a ,则 *(p++) 等 价a[0],*(++p)等价a[1]。 ⑶ (*p)++表示p所指向的元素值加1。
int sub_max(int b[],int n) { int temp,i; temp=b[0]; for(i=1;i<n;i++) if(temp<b[i]) temp=b[i]; return temp; }
程序运行结果: please input array a: 2517684390 max=9
⑵指针变量可以指到数组以后的内存单元,系统并不认为非 法,因此使用指针变量指向数组元素时,要特别注意指针 变量所指向的位置。
C Programming Language
【例1】为数组a赋值后输出数组a的所有元素值。
#include <stdio.h> main() { int *p,i,a[10]; p=a; for(i=0;i<10;i++) *p++=i; /* 等价于*p=i;p++; */ for(i=0;i<10;i++) printf("%6d",*p++); }
程序运行结果: -22 285 1 -24 2282 -20 0 14917 21596 23619
C Programming Language
改正后的程序 main() { int *p,i,a[10]; p=a; for(i=0;i<10;i++) *p++=i; p=a; /*在输出前使p重新指向数组a的首地址*/ for(i=0;i<10;i++) printf("%6d",*p++); }
通过使用指针变量来指向数组中的不同元素,可使程序效 率更高,执行速度更快。
C Programming Language
指向一维数组的指针变量
• 一个数组存储在一块连续内存单元中;数组名就是这块连
续内存单元的首地址; • 第 (i+1) 个数组元素的地址可表示为 &data[i] 或 (data+i) 。 • 可以通过以下方式为指向数组的指针赋值: int *pa,a[10];
假设pt指向了一维数组a,那么C语言规定指针对数组的
表示方法有如下几种。 ⑵*(pt+n)和*(a+n)表示pt+n或a+n指 向的数组元素值,即等效于a[n]。
*(pt+0) *(pt+1) *(pt+2)
数组a
a[0] a[1] a[2]
……
*(a+0) *(a+1) *(a+2)
• 在编译时,对数组元素a[i]就是处
引用一个数组元素的方法:
①下标法:即a[i]的形式。
②地址法:*(a+i)。其中a是数组名。
③指针法:即*(pt+i)或pt[i]。其中pt是指向数组a的指 针变量。
C Programming Language
注意事项
⑴指针变量可以实现本身的值的改变,这一点与数组名不同。
如p++是合法的;而a++是错误的。