2016年8月19日 星期五

雙指標

附上程式碼:

#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;
}

輸出結果:


畫成大家比較看得懂的架構:


沒有留言:

張貼留言