main.h在C中定義結構數組?
#define DATA struct data
DATA
{
int id;
char data;
}
的main.c
DATA *listOfData[100];
所以在這一點上,我會/應該可以在列表中這樣的訪問數據:
printf(listOfData[5]->data);
它不是不讓我這樣做,運行只是凍結最後一次印刷f ...沒有錯誤或任何東西。
main.h在C中定義結構數組?
#define DATA struct data
DATA
{
int id;
char data;
}
的main.c
DATA *listOfData[100];
所以在這一點上,我會/應該可以在列表中這樣的訪問數據:
printf(listOfData[5]->data);
它不是不讓我這樣做,運行只是凍結最後一次印刷f ...沒有錯誤或任何東西。
這是因爲你已經定義了一個指針數組。但是你從未初始化任何指針。
因此:
printf(listOfData[5]->data);
將會崩潰(未定義的行爲),因爲你是在指數5
*取消引用(無效)指針(這就是定義一個struct一個非常奇怪的方式.. )
要解決此問題,您需要爲陣列中的每個指針分配。如果你不真正需要的是一個指針數組,那麼它可能是更好的只是使它的結構本身的數組:
DATA listOfData[100];
和訪問它:
listOfData[5].data
然後你不必處理分配每個元素。
您尚未顯示DATA *的任何內存分配。要麼你的陣列聲明爲一個結構數據的數組,如:
DATA listOfData[100];
或動態分配內存並分配您的數組中的指針。
我不確定爲什麼printf
只會凍結,但這有幾個問題。首先,您的DATA*
陣列中的所有指針都未初始化。你可能是爲了使代替DATA
指針數組的DATA
數組,:
DATA listOfData[100];
您還沒有以分號結束的結構,所以它似乎不太可能,這甚至會編譯:
#define DATA struct data
DATA
{
int id;
char data;
};
最後,您以相當不安全的方式使用printf
;第一個參數必須是一個格式字符串,或者你可以得到奇怪的行爲,如果第一個參數中有一個%
:
printf("%c\n", listOfData[5].data);
不要隱藏的#define後面的關鍵字。你迷惑自己。 – wildplasser
該定義是我的教授給我的框架/僞代碼的一部分 –
好吧:告訴他停止這樣做! – wildplasser