用指向指標的指標的方法對n個整數排序並輸出 要求將排序單獨寫成一個函式。n個整數在主函式中輸入,最後在主函式中輸出
阿新 • • 發佈:2020-07-13
用指向指標的指標的方法對n個整數排序並輸出。要求將排序單獨寫成一個函式。n個整數在主函式中輸入,最後在主函式中輸出。
解題思路: 指向指標的指標其實就是二級指標,使用二級指標的儲存一級指標的地址,讓這個一級指標指向具體的資料空間。排序就是按照每個元素指標指向空間中的資料進行比對排序即可。
答案:
#include<stdio.h> #include<string.h> void sort(int *s[], int len) { int i, j; for (i = 0; i < len; i++) { for (j = i; j < len; j++) { //s[i]就是s指標陣列中第i個元素儲存的一級指標,再次解引用就是最終的資料空間 if (*(s[i]) > *(s[j])) { int tmp = *(s[i]); //指標的好處在於直接通過賦值可以改變指向 *(s[i]) = *(s[j]); //只要交換了字串的地址就實現了字串的交換 *(s[j]) = tmp;//因此通過指標指向的交換就能夠實現陣列中字串的排序 } } } } int main() { int *integers; int count = 0; printf("Please enter the number of count: "); scanf_s("%d", &count); integers = (int*)malloc(count * sizeof(int));//為指標申請count個int空間用於存放輸入的資料 int **p = (int **)malloc(count * sizeof(int*));//為指標申請count個int*空間用於存放int空間的首地址 printf("Please enter %d integers: \n", count); for (int i = 0; i < count; i++) { p[i] = integers + i; //將陣列中每個int元素空間的首地址賦值給指標陣列中的各個元素 scanf_s("%d", p[i]);//p[i]就儲存時第i個數據的地址,因此這裡不用取地址 } sort(p, count); for (int i = 0; i < count; i++) { printf("%d ", integers[i]); } printf("\n"); free(integers); free(p); system("pause"); return 0; }