第七章 指针-1.ppt

第七章 指针-1

main() { int *p1,*p2,*p,a,b; scanf(“%d,%d”,a,b); p1=a,p2=b; if(ab) {p=p1;p1=p2;p2=p;} printf(“a=%d,b=%d\n”,a,b); printf(“max=%d,min=%d\n”,*p1,*p2); } #includestdio.h int main() { int *p1,*p2,t,a,b; scanf(%d,%d,a,b); p1=a;p2=b; if(ab) {t=*p1;*p1=*p2;*p2=t;} printf(a=%d,b=%d\n,a,b); printf(max=%d,min=%d\n,*p1,*p2); } 3).指针运算原理 一个指针指向某数组里的元素时,为什么能算出下一元素位置?(这是指针运算的基础) 指针有指向类型,p指向数组a时,由于p的指向类型与a的元素类型一致,数据对象的大小可以确定。 p+1的值可根据p的值和数组元素大小算出。由一个数组元素位置可以算出下一元素位置,或几个元素之后的元素位置。指针运算的基础。 通用指针即使指到数组里,因没有确定指向类型,因此不能做一般指针计算,只能做指针比较。 4).基于指针的数组程序设计 指针运算是处理数组元素的另一方式。设有int数组a和指针p1,p2,下面代码都打印a的元素: for (p1 = a, p2 = a+10; p1 p2; ++p1) printf(%d\n, *p1); for (p1 = a; p1 a+10; ++p1) printf(%d\n, *p1); for (p1 = p2 = a; p1 - p2 10; ++p1) printf(%d\n, *p1); for (p1 = a; p1 - a 10; ++p1) printf(%d\n, *p1); int *p1, *p2, *p3, *p4; int a[10] = {1,2,3,4,5,6,7,8,9,10}; 5).数组参数的意义 C规定,数组参数就是相应的指针参数: int f(int n, int d[]) {... ...} int f(int n, int *d) {... ...} 数组参数就是利用指针实现的! 这也使采用数组参数的函数能修改实参数组。 函数里也可用指针方式做元素访问。 int funsum (int n, int a[]) { int i, m = 0; for (i = 0; i n; ++i) m += *(a+i); return m; } m+=a[i]; 意义相同 6).使用数组的一段元素 以数组为参数的函数可处理一段元素。求元素和: double sum(int n, double a[]); 设有双精度数组b,40个元素已有值: 用sum可求b所有元素之和/前一段元素之和: x = sum(40, b); y = sum(20, b); sum不知道b的大小,它由参数得到数组首元素地址,从这里开始求连续40或20个元素的和。 也可用sum求b中下标12到24的一段元素之和。 z = sum(13, b+12); #includestdio.h enum{N=10}; int funsum (int n, int a[]) { int i, m = 0; for (i = 0; i n; ++i) m += *(a+i); return m; } int main() { int a[N],i,sum; for(i=0;iN;i++) scanf(%d, a[i]); sum= funsum(N,a); printf(%d\n, sum); return 0; } a+i #includestdio.h enum{N=10}; int funsum (int n, int a[]) { int i, m = 0; for (i = 0; i n; ++i) m += *(a+i); return m; } int main() { int a[N],*p,sum; for(p=a;p-aN;p++) scanf(%d, p); sum= funsum(N,a); printf(%d\n, sum); return 0; } 例输入a、b、c三个整数,按大小顺序输出。 main() { int a,b,c,*p1,*p2,*p3; scanf(“%d,%d,%d”,a,b,c); p1=a,p2=b,p3=c;

文档评论(0)

1亿VIP精品文档

相关文档