#include <stdio.h>#define N 6在a[i]~a[N-1]中,int mainO {最小数与a[i]对换int a[N]; int i, j, minIdx, t;printf("input numbers: In");for (i = O: i < N: i++)"%d"&aiD:scanffor (i = O; i < N - l; i++)minIdx = i;for (j= i + l;j< N; j++)if (a[j] < a[minIdx]) minIdx = j;t = a[minIdx]; a[minIdx] = a[i]; a[i] = t;printf("the sorted numbers:n);版权所有@陈哲printf("%d ", a[i]);for (i = O: i < N: i++)printf("\n");return O;保留所有权利21
版 权 所 有 © 陈 哲 保 留 所 有 权 利 #include <stdio.h> #define N 6 int main() { int a[N]; int i, j, minIdx, t; printf("input numbers:\n"); for (i = 0; i < N; i++) scanf("%d", &a[i]); for (i = 0; i < N - 1; i++) { minIdx = i; for (j = i + 1; j < N; j++) if (a[j] < a[minIdx]) minIdx = j; t = a[minIdx]; a[minIdx] = a[i]; a[i] = t; } printf("the sorted numbers:\n"); for (i = 0; i < N; i++) printf("%d ", a[i]); printf("\n"); return 0; } 21 在a[i]~a[N-1]中, 最小数与a[i]对换
数组元素地址和动态数组>一个数组包含若于元素,每个元素相当于一个变量,因此每个元素都有地址>数组名是一个指针常量,代表数组首元素的地址例如: int a[10] = [5, 6, 10, 8, 7, 9];a代表a[o]的地址版权所有@陈暂保留所有权利合法a+1合法*a 和 *(a+1)非法a=a+122
版 权 所 有 © 陈 哲 保 留 所 有 权 利 数组元素地址和动态数组 ➢一个数组包含若干元素,每个元素相当 于一个变量,因此每个元素都有地址。 ➢数组名是一个指针常量,代表数组首元 素的地址。 例如:int a[10] = {5, 6, 10, 8, 7, 9}; a代表a[0]的地址 a+1 合法 *a 和 *(a+1) 合法 a = a+1 非法 22
(把某一元>指针变量可以指向数组元素素的地址存到一个指针变量中)。&.a[o]Pa[o]13int a[10] = {1,3, 5,7,9,11,135int *p;7p = &a[0];等价于p=a;911版权所有@陈暂保留所有权利注意:数组名a不代表整个数组13只代表数组首元素的地址15“p=a;”的作用是“把数组a的首17元素的地址赋给指针变量p”,而a[9]19不是“把数组a各元素的值赋给p”23
版 权 所 有 © 陈 哲 保 留 所 有 权 利 ➢指针变量可以指向数组元素(把某一元 素的地址存到一个指针变量中)。 int a[10] = {1,3,5,7,9,11,13,15,17,19 }; int *p; p = &a[0]; 23 等价于p=a; 注意:数组名a不代表整个数组, 只代表数组首元素的地址。 “p=a;”的作用是“把数组a的首 元素的地址赋给指针变量p”,而 不是“把数组a各元素的值赋给p
>指针算术:·如果指针变量p指向数组中的一个元素°p+1指向同一数组的下一个元素°p-1指向同一数组的上一个元素例如:floata[10],*p=a;假设a[0]的地址为2000,则p的值为2000p+1的值为2004版权所有@陈保留所有权利p-1的值为1996如果指针变量p1和p2都指向同一个数组p1-p2的值是二者之间元素的个数p1+p2没有意义24
版 权 所 有 © 陈 哲 保 留 所 有 权 利 ➢指针算术: ◦如果指针变量p指向数组中的一个元素, ◦p+1指向同一数组的下一个元素 ◦p-1指向同一数组的上一个元素。 例如: float a[10], *p=a; 假设a[0]的地址为2000,则 ◦p的值为2000 ◦p+1的值为2004 ◦p-1的值为1996 ◦如果指针变量p1和p2都指向同一个数组, ◦p1-p2的值是二者之间元素的个数 ◦p1+p2没有意义 24
p>指针算术实例:a[0]a+1,p+1。如果p的值为&a[Ol,则a+ia[1]和p+i就是元素a[il的地址a[2]p1°p2-p1的值是4。a[3]a+i,p+ip1+p2没有意义a[4]*(p+i)>访问一个数组元素,可用两种等价方法:a[5]下标,如a[]或p[i]a[6]p2版权所有@陈暂保留所有权利解引用,如*(a+i)或*(p+i)a[7]编译器会将a[i]转换为Va[8]a+9,p+9*(a+i),即先计算元素a[9]的地址然后解引用25
版 权 所 有 © 陈 哲 保 留 所 有 权 利 ➢指针算术实例: ◦如果p的值为&a[0],则a+i 和p+i就是元素a[i]的地址。 ◦p2-p1的值是4。 ◦p1+p2没有意义。 ➢访问一个数组元素, 可用两种等价方法: ◦下标,如a[i]或p[i] ◦解引用,如*(a+i)或*(p+i) ➢编译器会将a[i]转换为 *(a+i),即先计算元素 的地址然后解引用。 25 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] p a+1,p+1 a+i,p+i a+9,p+9 *(p+i) p1 p2