附上程式碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv)
{
char *str1 = "apple";
char *str2 = "blue";
char *str3 = "cat";
char **mystr;
mystr = (char **)malloc(sizeof(char *) * 3);
mystr[0] = (char *)malloc(sizeof(char) * strlen(str1));
mystr[1] = (char *)malloc(sizeof(char) * strlen(str2));
mystr[2] = (char *)malloc(sizeof(char) * strlen(str3));
strcpy(mystr[0], str1);
strcpy(mystr[1], str2);
strcpy(mystr[2], str3);
printf("mystr的記憶體位置 : %x \t mystr存放的值 : %x\n\n", &mystr, mystr);
printf("mystr[0]的記憶體位置 : %x \t mystr[0]存放的值 : %x\n", &mystr[0], mystr[0]);
printf("mystr[1]的記憶體位置 : %x \t mystr[1]存放的值 : %x\n", &mystr[1], mystr[1]);
printf("mystr[2]的記憶體位置 : %x \t mystr[2]存放的值 : %x\n\n", &mystr[2], mystr[2]);
printf("mystr[0][0]的記憶體位置 : %x \t mystr[0][0]存放的值 : %c\n", &mystr[0][0], mystr[0][0]);
printf("mystr[0][1]的記憶體位置 : %x \t mystr[0][1]存放的值 : %c\n", &mystr[0][1], mystr[0][1]);
printf("mystr[0][2]的記憶體位置 : %x \t mystr[0][2]存放的值 : %c\n", &mystr[0][2], mystr[0][2]);
printf("mystr[0][3]的記憶體位置 : %x \t mystr[0][3]存放的值 : %c\n", &mystr[0][3], mystr[0][3]);
printf("mystr[0][4]的記憶體位置 : %x \t mystr[0][4]存放的值 : %c\n\n", &mystr[0][4], mystr[0][4]);
printf("mystr[1][0]的記憶體位置 : %x \t mystr[1][0]存放的值 : %c\n", &mystr[1][0], mystr[1][0]);
printf("mystr[1][1]的記憶體位置 : %x \t mystr[1][1]存放的值 : %c\n", &mystr[1][1], mystr[1][1]);
printf("mystr[1][2]的記憶體位置 : %x \t mystr[1][2]存放的值 : %c\n", &mystr[1][2], mystr[1][2]);
printf("mystr[1][3]的記憶體位置 : %x \t mystr[1][3]存放的值 : %c\n\n", &mystr[1][3], mystr[1][3]);
printf("mystr[2][0]的記憶體位置 : %x \t mystr[2][0]存放的值 : %c\n", &mystr[2][0], mystr[2][0]);
printf("mystr[2][1]的記憶體位置 : %x \t mystr[2][1]存放的值 : %c\n", &mystr[2][1], mystr[2][1]);
printf("mystr[2][2]的記憶體位置 : %x \t mystr[2][2]存放的值 : %c\n", &mystr[2][2], mystr[2][2]);
return 0;
}
輸出結果:
畫成大家比較看得懂的架構:

