【发布时间】:2020-03-05 20:35:06
【问题描述】:
这次我开始学习指针了。我试图从这个数组中读取字节。任务几乎完成,但 CLang 不断警告我,警告我不明白。这是我的代码。 警告说:“函数调用参数是一个未初始化的值”
int main(void)
{
int tab[] = {67305985,134678021,202050057};
int *pp=0;
pp=tab;
char *wsk=(char*)pp;
for (int i = 0; i < 12; i++)
{
if((wsk+i)!=(void*)NULL)
printf("%d ",*(wsk+i)); // warning on this line
else
return 0;
}
}
【问题讨论】:
-
(1) 不要发布代码图片。始终将您询问的代码作为文本发布。 (2) 我在发布的图像中只看到一个警告,并且它也很容易作为文本传达。
-
在这种特殊情况下,我不得不不同意@JohnBollinger。发布代码图像的目的是显示内联警告。编辑后,生成未初始化值警告的位置就不太清楚了。此外,让图像显示另一个值得一提的警告,否则可能会被错过。
-
在这种情况下,@Sniggerfardimungus,您应该查看how-to-ask,尤其是“请勿发布代码、数据、错误消息等的图像”部分(强调原文)。
-
@Sniggerfardimungus,它最初存在的方式可能比现在的方式略微更清晰,但使用起来要困难得多 .我们对问题格式的期望是有充分理由的,而且这个问题没有任何理由认为它应该是一个例外。
-
我也想了一会儿,@FredK,但它也是错误的。同样,
wsk是指向char的指针,最初指向tab表示的十二个字节中的第一个。*(wsk+i)取消引用 一个 字节,而不是四个。取消引用对 OP 循环采样的所有i值有效。作为可变参数,结果值随后被提升为int,printf因此接收到一个满足%d指令的参数。