標籤:
#include <stdlib.h>#include <string.h>#include <stdio.h>
//列印 排序 //封裝成函數void main(){ int i = 0, j = 0; int num = 4; char tmpBuf[30]; char myArray[10][30] = {"aaaaaa", "ccccc", "bbbbbbb", "1111111111111"}; //列印 printf("排序之前\n"); for (i=0; i<num; i++) { printf("%s\n", myArray[i]); } for (i=0; i<num; i++) { for (j=i+1; j<num; j++) { if (strcmp (myArray[i], myArray[j]) > 0) { strcpy(tmpBuf, myArray[i]); //交換的是記憶體塊 strcpy(myArray[i], myArray[j]); strcpy(myArray[j], tmpBuf); } } } //列印 printf("排序之後\n"); for (i=0; i<num; i++) { printf("%s\n", myArray[i]); } printf("hello...\n"); system("pause"); return ;}
封裝後:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
//問題的本質是:dm03_二級指標做輸入_第2種記憶體模型 的 myArray + 1 和 // dm03_二級指標做輸入_第1種記憶體模型 myArray + 1 不一樣 ;//指標的步長不一樣 指標所指向的記憶體空間的資料類不一樣 。。。。void printMyArray02_err(char **myArray, int num){ int i = 0; for (i=0; i<num; i++) { //printf("%s \n", myArray[i]); printf("%s \n", *(myArray+i) ); // }}void printMyArray02(char myArray[10][30], int num){ int i = 0; for (i=0; i<num; i++) { //printf("%s \n", myArray[i]); printf("%s \n", *(myArray+i) ); // }}//交換的是記憶體塊。。。。。。。。void sortMyArray02(char myArray[10][30], int num){ int i, j = 0; char tmpBuf[30]; for (i=0; i<num; i++) { for (j=i+1; j<num; j++) { if (strcmp (myArray[i], myArray[j]) > 0) { strcpy(tmpBuf, myArray[i]); //交換的是記憶體塊 strcpy(myArray[i], myArray[j]); strcpy(myArray[j], tmpBuf); } } }}//列印 排序 //封裝成函數void main(){ int i = 0, j = 0; int num = 4; char myBuf[30]; char tmpBuf[30]; char myArray[10][30] = {"aaaaaa", "ccccc", "bbbbbbb", "1111111111111"}; //myArray: 編譯器只會關心:有10行 ,每行30列。。。。。幹什嗎?myArray+1 多維陣列名的本質,myArray+1會往後面跳30個單元 { int len1 = sizeof(myArray); int len2 = sizeof(myArray[0]); int size = len1/len2; printf("len1:%d , len2:%d size:%d \n", len1, len2, size); } //列印 printf("排序之前\n"); printMyArray02(myArray, num); sortMyArray02(myArray, num); //列印 printf("排序之後\n"); printMyArray02(myArray, num); printf("hello...\n"); system("pause"); return ;}
第一種模型改變指標的指向,第二種模型直接交換記憶體塊。
C提高_day03_二級指標做輸入第2種記憶體模型