動態二維陣列

嗯,先這個記下來,方便以後觀念的釐清:

#include <malloc.h>
#include <stdio.h>

int main()
{
    const int sizex = 3;
    const int sizey = 2;
    int y;
    int** ia = (int**)malloc(sizey * sizeof(int*) + sizey * sizex * sizeof(int));
    int* iax = (int*)(ia + sizey);

    for (y = 0; y != sizey; ++y, iax += sizex)
        ia[y] = iax;

     /*
for是在建立開頭的index
如果沒做的話
這時的ia[y]沒初始化
&ia[y][x]會是不合法的address(把值印出來就知道了)
執行下去就會出錯

執行for以前的記憶體        執行for以後的記憶體(這裡的iax是指之前的iax)
ia                         ia
↓                         ↓
-----                      -----
int *                      int *    iax     &ia[0]
-----                      -----
int *                      int *    iax+3   &ia[1]
-----                      -----
int    iax                 int      iax     &ia[2]
-----                      -----
int                        int              &ia[3]
-----                      -----
int                        int              &ia[4]
-----                      -----
int                        int      iax+3
-----                      -----
int                        int 
-----                      -----
int                        int
-----                      -----
*/

    ia[0][1] = 100;
    printf("%d = %d\n", *(ia[0] + 1), ia[3]);

    free(ia);
    return 0;
}

0 意見:

張貼留言