二級指標做輸入的三種記憶體模型(學習筆記與記錄)
阿新 • • 發佈:2019-02-13
一:二級指標做輸入的第一種記憶體模型
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> //void print_array(char *p[],int n) void print_array(char **p, int n) { int i = 0; for (i = 0; i < n; i++) { printf("%s\n", p[i]); printf("\n"); } } //void sort_array(char *p[],int n) void sort_array(char **p, int n) { int i, j; char *tmp = NULL; for (i = 0; i < n - 1; i++) { for (j = i + 1; j < n; j++) { if (strcmp(p[i], p[j]) > 0) { tmp = p[i]; p[i] = p[j]; p[j] = tmp; } } } } int main(void) { //指標陣列,指標的陣列,它是一個數組,每一個元素都是指標char * char *p[] = { "3333333333333","11111111111","bbbbbbbbbbbbb","aaaaaaaaaa" }; int n = sizeof(p) / sizeof(p[0]); printf("排序前:\n"); print_array(p,n); sort_array(p, n);//排序 printf("排序後:\n"); print_array(p, n); system("pause");//暫停 return 0; }
二:二級指標做輸入的第二種記憶體模型
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> void print_array(char a[][30], int n) { int i = 0; for (i = 0; i < n; i++) { printf("%s\n", a[i]); } } void sort_array(char a[][30], int n) { int i = 0; int j = 0; char tmp[30]; for (i = 0; i < n - 1; i++) { for (j = i + 1; j < n; j++) { if (strcmp(a[i], a[j]) > 0) { ///交換整個記憶體塊 strcpy(tmp, a[i]); strcpy(a[i], a[j]); strcpy(a[j], tmp); } } } } int main(void) { //4個a[30]的一維陣列,二維陣列 char a[][30] = { "22222222222", "11111111111", "bbbbbbbbbbb", "aaaaaaaaaaaa" }; int n = sizeof(a) / sizeof(a[0]); printf("排序前:\n"); print_array(a, n); sort_array(a, n);//排序 printf("排序後:\n"); print_array(a, n); system("pause"); return 0; }
三:二級指標做輸入的第三種記憶體模型
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> char **getMem(int n) { int i = 0; //動態分配一個數組,每個元素都是char * char **buf = (char**)malloc(n*(sizeof(char*)));//char *buf[3] if (buf == NULL) { return -1; } for (i = 0; i < n; i++) { buf[i] = (char*)malloc(30 * sizeof(char)); char str[30]; sprintf(str, "test%d%d", i, i); strcpy(buf[i], str); } return buf; } void print_buf(char **buf, int n) { int i = 0; for (i = 0; i < n; i++) { printf("%s ", buf[i]); } } void free_buf(char **buf, int n) { int i = 0; for (i = 0; i < n; i++) { free(buf[i]); buf[i] = NULL; } if (buf != NULL) { free(buf); buf = NULL; } } int main(void) { char **buf = NULL; int n = 3; buf = getMem(n); if (buf == NULL) { printf("getMem err\n"); return -1; } print_buf(buf, n); free_buf(buf, n); buf = NULL; system("pause"); return 0; } //記憶體結構圖如下