【发布时间】:2021-06-29 12:11:08
【问题描述】:
我正在尝试编译并将每个值的地址显示到数组中。
int i[10] = {1,2,3,4,5,6,7,8,9,10}, x;
float f[10] = {1,2,3,4,5,6,7,8,9,10};
double d[10] = {1,2,3,4,5,6,7,8,9,10};
/*int *p_i = &i;
float *p_f = &f;
double *p_d = &d;*/
int main(void){
printf("\n\tInteger\tFloat\tDouble");
printf("\n=======================================");
/* loop to show the address in each element that have the arrayes */
for(x = 0; x < 10; x++){
printf("\nElement %d\t%d\t%d\t%d", x+1, &i[x], &f[x], &d[x]);
// printf("\nElement %d\t%d\t%d\t%d", x+1, p_i++, p_f++, p_d++);
}
printf("\n=======================================\n");
}
如果语法正确,我不明白为什么。我也搜了一下,发现的代码几乎是一样的。
【问题讨论】:
-
将指针的
%d更改为%p。 -
i[x]是一个int。&i[x]是指向int的指针。如果int是您要打印的内容,那么这就是您应该传递给printf()的内容。如果指针是您要打印的,那么正确的指令是%p,而不是%d。类似的情况更适用于变量f和d:如果你想打印float和double,那么对应的指令应该(都)是%f,你不应该使用&。如果你想打印指针,那么指令应该是%p。 -
别忘了将指针指向
void*:printf("\nElement %d\t%d\t%d\t%d", x+1, &i[x], &f[x], &d[x]);->printf("\nElement %d\t%p\t%p\t%p", x+1, (void*)&i[x], (void*)&f[x], (void*)&d[x]); -
ButchBet,您要打印
int还是指针?
标签: c pointers compiler-errors printf conversion-specifier