据我所知,这个数组[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指针? –