據我所知,這個數組[1]和數組+ 1實際上是兩種寫入相同內容的方式。不過,我最近一直在研究void指針和數組,並使這個程序來測試我對它的理解。陣列+ 1工作陣列[1]不起作用
#include <stdio.h>
#include <stdlib.h>
int main(void){
void** data;
data = malloc(sizeof(int)*2);
*((int*)data) = 5;
*((int*)(data+1)) = 10;
printf("%d\n", *((int*)data));
printf("%d\n", *((int*)(data+1)));
free(data);
return 0;
}
這是工作程序的版本,由於某種原因,但是這個版本不
#include <stdio.h>
#include <stdlib.h>
int main(void){
void** data;
data = malloc(sizeof(int)*2);
*((int*)data[0]) = 5;
*((int*)data[1]) = 10;
printf("%d\n", *((int*)data));
printf("%d\n", *((int*)data1]));
free(data);
return 0;
}
我不能完全讓編譯器錯誤,但程序簡單地停止運行,我已經在一臺使用gcc的win 10計算機上編譯,下面的標誌爲-pedantic-errors -Wall
,就像我之前說過的,程序編譯但運行時我得到了經典的Program.exe has stopped working
錯誤消息,至今我真的無法想到爲什麼其中一個原因會工作,其他人不會。
否:'數組[1]'與'*(a + 1)'相同 - 「*」表示所有區別。 –
在你的第二個例子中,你有:'printf(「%d \ n」,*((int *)data1]));' - 缺少'['。 –
你爲什麼使用void指針? –