看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《lO (今天早上)》之銘言: : #include<stdlib.h> : #include<stdio.h> : int main() : { : int **x; : x = (int **)malloc(10 * sizeof(int *); // 這個動作一定要有 : for (int i=0;i<=9;i++) : x[i]=(int*)malloc(5*sizeof(int)); : for (int i=0;i<=9;i++) : { : for (int k=0;k<=9;k++) : printf("%u ",&x[i][k]); : printf("\n"); : } : system("pause"); : } : 我原先的用意是 想開一個二維陣列 : 可是明明只開了5個sizeof(int) : 卻可以印出10個位址(每一個位址都差4 代表為sizeof(int)) : 不知道這樣的結果是什麼原因造成的@@ : 麻煩了 當然可以「印出位置」,因為 &x[i][k] 等於 x[i] + sizeof(int) * k 只要 x[i] 有值,那麼就可以算出 &x[i][k] 的那個值 甚至把黃色的迴圈寫成這樣子 for (int i = 0; i <= 9; i++) x[i] = 0; 還是一樣可以印出值 那麼 malloc 的大小有什麼意義呢? 當你實際上寫 x[i][k] = 10; 這樣的程式碼,對 x[i][k] 寫入資料 malloc 配置了多大的空間,k 就只能用到多大,否則後果沒有人會知道 XDD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.171.46
lO:謝謝囉 看來是我誤會你的意思了 哈 05/25 21:53