1.将数组a中n个整数按相反顺序存放
#include<stdio.h> int main() { void inv(int *x, int n); int i, arr[10], *p = arr; printf("The original array:\n"); for (i = 0; i < 10; i++, p++) scanf_s("%d", p); printf("\n"); p = arr; inv(p, 10); printf("The array has been inverted:\n"); for (p = arr; p < arr + 10; p++) printf("%d ", *p); printf("\n"); return 0; } void inv(int *x, int n) { int *p, m, temp, *i, *j; m = (n - 1) / 2; i = x; j = x + n - 1; p = x + m; for (; i <= p; i++, j--) { temp = *i; *i = *j; *j = temp; } return; }运行结果:
2.用指针方法对10个整数按由大到小顺序排序
#include<stdio.h> int main() { void sort(int x[], int n); int i, *p, a[10]; p = a; printf("please enter 10 integer numbers:\n"); for (i = 0; i < 10; i++) scanf_s("%d", p++); p = a; sort(p, 10); for (p = a, i = 0; i < 10; i++) { printf("%d ", *p); p++; } printf("\n"); return 0; } void sort(int x[], int n) { int i, j, k, t; for (i = 0; i < n - 1; i++) { k = i; for (j = i + 1; j < n; j++) if (x[j] > x[k])k = j; if (k != i) { t = x[i]; x[i] = x[k]; x[k] = t; } } }运行结果:
3.输出二维数组任一行任一列元素的值
#include<stdio.h> int main() { int a[3][4] = { 1,3,5,7,9,11,13,15,17,19,21,23 }; int(*p)[4], i, j; p = a; printf("please enter row and colum:"); scanf_s("%d,%d", &i, &j); printf("a[%d,%d]=%d\n", i, j, *(*(p + i) + j)); return 0; }运行结果:
4.有一个班,3个学生,各学4门课,计算总平均分数以及第n个学生的成绩
#include<stdio.h> int main() { void average(float *p, int n); void search(float(*p)[4], int n); float score[3][4] = { 65,67,70,60,80,87,90,81,90,99,100,98 }; average(*score, 12); search(score, 2); return 0; } void average(float *p, int n) { float *p_end; float sum = 0, aver; p_end = p + n - 1; for (; p <= p_end; p++) sum = sum + (*p); aver = sum / n; printf("average=%5.2f\n", aver); } void search(float(*p)[4], int n) { int i; printf("Th score of No.%d are:\n", n); for (i = 0; i < 4; i++) printf("%5.2f ", *(*(p + n) + i)); printf("\n"); }运行结果: