亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將int-C的空值*轉換為2D數組

將int-C的空值*轉換為2D數組

C
慕無忌1623718 2019-06-16 15:11:21
將int-C的空值*轉換為2D數組我試圖在C中轉換一個空*指向int*2D數組的指針。下面是我試圖使用的代碼(刪除了所有無關的比特):\*assume that i have a data structure called graph with some   *element "void** graph" in it and some element "int order" */void initialise_graph_data(graph_t *graph){     void **graph_data = NULL;     int (*matrix)[graph->order];     size_t size = (graph->order * graph->order) * sizeof(int);     graph_data = safe_malloc(size); /*safe malloc works fine*/     matrix = (int(*)[graph->order])graph_data;     graph->graph = graph_data;}當我編譯它時,它工作得很好,但是給了我一個警告:變量“矩陣”是設置的,但沒有使用。我真的不想使用臨時矩陣變量,因為函數應該只是初始化數組,而不是在數組中放置任何內容;但是,如果我試圖將圖形_data直接轉換為int*時,當我將它輔助到圖->圖時,如下所示:graph->graph = (int(*)[graph->order])graph_data;它給我一個來自不兼容指針類型警告的賦值。我只是投錯了嗎?有人對我如何使它在沒有臨時“矩陣”變量的情況下工作有任何建議嗎?或者如果沒有,我能用這個變量做些什么,這樣它就不會給我警告,它已經設置了,但沒有被使用。謝謝
查看完整描述

1 回答

?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

編譯器是對的,數組(或指向數組的指針)與指向指針的指針不一樣。想想它們在記憶中是如何排列的:

以數組形式表示的大小為MXN的矩陣:

+--------------+--------------+-----+----------------+--------------+-----+------------------+
| matrix[0][0] | matrix[0][1] | ... | matrix[0][N-1] | matrix[1][0] | ... | matrix[M-1][N-1] |
+--------------+--------------+-----+----------------+--------------+-----+------------------+

a和指針形式相同的“矩陣”:

+-----------+-----------+-----------+-----+
| matrix[0] | matrix[1] | matrix[2] | ... |
+-----------+-----------+-----------+-----+
  |           |           |
  |           |           V
  |           |           +--------------+--------------+-----+
  |           |           | matrix[2][0] | matrix[2][1] | ... |
  |           |           +--------------+--------------+-----+
  |           |
  |           V
  |           +--------------+--------------+-----+
  |           | matrix[1][0] | matrix[1][1] | ... |
  |           +--------------+--------------+-----+
  |
  V
  +--------------+--------------+-----+
  | matrix[0][0] | matrix[0][1] | ... |
  +--------------+--------------+-----+

如果您分配正確的大小并不重要,這兩個變量只是不兼容,這正是編譯器告訴您的。


查看完整回答
反對 回復 2019-06-16
  • 1 回答
  • 0 關注
  • 323 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號