推 lO:謝謝囉 看來是我誤會你的意思了 哈 05/25 21:53
※ 引述《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