- 2
- 0
- 约1.59万字
- 约 82页
- 2022-05-09 发布于广东
- 举报
main() { int a[10]={1,2,3,4,5,6,7,8,9,10},*p,i; for (p=a;p(a+10);p++) printf(“%4d”,*p); } 11.3 数组与指针 p的初值为数组a的起始地址 计算过程中使用了指针加法 数组名a在计算过程中代表数组的首地址 main() { int a[10]={1,2,3,4,5,6,7,8,9,10},*p,i; for (p=a,i=0;i10;i++) printf(“%4d”, p[i]); } 11.3 数组与指针 用下标法引用数组元素 p的初值为数组a的起始地址 11.3 数组与指针 main() { int i,*p,a[10]; p=a; for(i=0;i10;i++) scanf(%d,p++); printf(\n); for(i=0;i10;i++,p++) printf(%d,*p); } for(i=0;i10;i++) { scanf(%d,p); p++; } 1 2 3 4 5 6 7 8 9 0↙ 22153 234 0 0 30036 25202 11631 8259 8237 28483 a[2] a[3] a[4] … a[9] ? ? ? a[1] a[0] 2000 2002 2004 2006 2008 200A 2024 2022 2020 2010 p p=a; 1 2 3 4 5 6 7 8 9 0 例 通过指针变量输出a数组的10个元素 main() { int a[ ]={5,8,7,6,2}; int y,*p=a[1]; y=(*--p)++; printf(%d ,y); printf(%d,a[0]); } 11.3 数组与指针 a[2]7 a[3]6 a[4]2 … … a[1]8 a[0]5 2000 2002 2004 2006 2008 200A 2024 2022 2020 2010 p p 6 5 y 5 6 例: 用数组名作函数参数 数组名作函数实参,传递给形参的是地址(地址传递) 传递的地址是数组的首地址,形参接收的是数组的首地址 形参定义时为数组,形参数组的维数可省略(一维数组) 实际上,编译系统把形参数组名作为指针变量来处理 11.3 数组与指针 前面已经分析,指向数组的指针变量可以通过指针法,也可以通过下标法引用数组元素,所以 11.3 数组与指针 void f(int b[ ]) {printf(len of b is %dByte\n,sizeof(b)); printf(a[1]=%d,b[1]); } main() { int a[3]={1,2,3}; f(a);} len of b is 2Byte a[1]=2 例: void f(int *b) {printf(a[1]=%d,*(b+1));} 1 2 3 … 2000 b b a 2000 2Byte 数组名作函数参数,实参与形参的对应关系 11.3 数组与指针 实参 形参 数组名 指针变量 数组名 指针变量 数组名 数组名 指针变量 指针变量 例 将数组a中n个整数按相反顺序存放 11.3 数组与指针 算法: 设两个“位置指示变量”i和j,i的初值为0,j的初值为n-1 将a[i]与a[j]交换 使i的值加1,j的值减1 再将a[i]与a[j]对换,直到i=(n-1)/2为止 main() {int i,a[10]={3,7,9,11,0,6,7,5,4,2}; printf(The original array:\n); for(i=0;i10;i++) printf(%d,,a[i]); printf(\n); inv(a,10); printf(The array has been inverted:\n); for(i=0;i10;i++) printf(%d,,a[i]); printf(\n); } void inv(int x[ ],int n) { int temp,i,j,m=(n-1)/2; for(i=0;i=m;i++) {j=n-1-i; temp=x[i]; x[i]=x[j]; x[j]=temp; } } 11.3 数组与指针 9 0 a[2]9 a[3]11 a[4]0 a[5]6 a[6]7
原创力文档

文档评论(0)