#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <stdio.h> //打印 排序 //封装成函数 void main31() { int i = 0, j = 0; int num = 4; char myBuf[30]; char tmpBuf[30]; char myArray[10][30] = {"aaaaaa", "ccccc", "bbbbbbb", "1111111111111"}; //打印 printf("排序之前 "); for (i=0; i<num; i++) { printf("%s ", 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("排序之后 "); for (i=0; i<num; i++) { printf("%s ", myArray[i]); } printf("hello... "); system("pause"); return ; } //问题的本质是: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 ", myArray[i]); printf("%s ", *(myArray+i) ); // } } void printMyArray02(char myArray[10][30], int num) { int i = 0; for (i=0; i<num; i++) { //printf("%s ", myArray[i]); printf("%s ", *(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 main333() { 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 多维数组名的本质, { int len1 = sizeof(myArray); int len2 = sizeof(myArray[0]); int size = len1/len2; printf("len1:%d , len2:%d size:%d ", len1, len2, size); } //打印 printf("排序之前 "); printMyArray02(myArray, num); sortMyArray02(myArray, num); //打印 printf("排序之后 "); printMyArray02(myArray, num); printf("hello... "); system("pause"); return ; }