[心得] malloc多維陣列

看板C_and_CPP作者 (zzz)時間15年前 (2010/04/07 16:49), 編輯推噓3(306)
留言9則, 6人參與, 最新討論串1/1
看到"陣列指標與陣列"系列文章 突然有個想法 如果要用純C malloc多維陣列 且維度和大小是固定的 應該可以用比一般用迴圈malloc更簡單的方式存取多維陣列 以下是三維陣列程式碼 不知這樣是正確的嗎 #include <stdio.h> #include <stdlib.h> #define SIZEZ (10u) #define SIZEY (10u) #define SIZEX (10u) main() { int i=0; int *arr=0; int (*p_arr)[SIZEY][SIZEZ]=0; //存取陣列用 arr=(int *)malloc(SIZEX*SIZEY*SIZEZ*sizeof(int)); p_arr=(int (*)[SIZEY][SIZEZ])arr; for(i=0;i<SIZEX*SIZEY*SIZEZ; i++) { arr[i]=i; //填入0~999 } printf("%d\n",p_arr[1][2][3]); //輸出123 free(arr); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.94.60 ※ 編輯: shyann 來自: 140.114.94.60 (04/07 16:52)

04/07 17:31, , 1F
看不懂,陣列維度大小都固定,為什麼還用malloc?
04/07 17:31, 1F

04/07 17:36, , 2F
理由一, size太大, stack放不下, 又不想用static或
04/07 17:36, 2F

04/07 17:36, , 3F
global變數.
04/07 17:36, 3F

04/07 18:49, , 4F
應該是對的沒錯...p_arr的型態的確不好寫
04/07 18:49, 4F

04/08 15:28, , 5F
小弟看不懂p_arr=(int (*)[SIZEY][SIZEZ])arr;這行 T_T
04/08 15:28, 5F

04/08 15:47, , 6F
把 int * 轉成 int (*)[SIZEY][SIZEZ]
04/08 15:47, 6F

04/08 15:48, , 7F
int * 並不能用 arr[1][2][3] 這樣來取值
04/08 15:48, 7F

04/08 16:50, , 8F
以純C來說 p_arr=arr; 也ok 只是會有warning
04/08 16:50, 8F

04/09 08:01, , 9F
感謝
04/09 08:01, 9F
文章代碼(AID): #1Bl4SABX (C_and_CPP)