第一种:指针的指针
注:char *arr[] = { "dddd", "cccc", "vvvv", "aaaa" };此定义字符串被保存在字符常量区,所以不可以修改,只能修改指针的顺序
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<string.h> void str_sort(char **arr, int size) { assert(arr); int i = 0; for (i = 0; i < size - 1; i++) { int flag = 0; int j = 0; for (j = 0; j < size - 1 - i; j++) { if (strcmp(*(arr+j), *(arr+j+1))>0) { flag = 1; char *buf = NULL; //修改指针 buf = *(arr + j); *(arr + j) = *(arr + j + 1); *(arr + j + 1) = buf; } } if (flag == 0) { break; } } } int main() { char *arr[] = { "dddd", "cccc", "vvvv", "aaaa" }; int size = sizeof(arr) / sizeof(arr[0]); str_sort(arr, size); int i = 0; for (i = 0; i < size; i++) { printf("%s ", arr[i]); } system("pause"); return 0; }
第二种:指针数组
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<string.h> void str_sort(char (*arr)[10], int size) { assert(arr); int i = 0; for (i = 0; i < size - 1; i++) { int j = 0; for (j = 0; j < size - 1 - i; j++) { if (strcmp(*(arr + j), *(arr + j + 1))>0) { char buf[10] = {0}; strcpy(buf, *(arr + j)); strcpy(*(arr + j), *(arr + j + 1)); strcpy(*(arr + j + 1), buf); } } } } int main() { char arr[][10] = { "ddd", "cccc", "vvvv", "aaaa", "rrrr", "ssss", "cccc", "aaaa" }; int size = sizeof(arr) / sizeof(arr[0]); str_sort(arr, size); int i = 0; for (i = 0; i < size; i++) { printf("%s ", arr[i]); } system("pause"); return 0; }