首先,让我澄清一下,我知道将指针作为参数传递给这些printf
说明符是不正确的。然而,我有兴趣知道printf
它完成后会发生什么。
使用普通的打印说明符%d
forint
和%f
for float
,为什么是int *
打印,而float *
不会呢?
例如,给定这些变量(未初始化):
int a, *pA;
float b, *pB;
pA = &a;
pB = &b;
当这样调用时:
void printVar(int *a, float *b)
{
printf("%d\n", a);//why does "a" print at all?
printf("%d %p\n", a, b);// when "b" prints only using %p
//printf("%d %f", a, b);// but fails on parameter mismatch using %f
printf("%d %f\n" , *a, *b);// prints normally (as expected)
}
为什么我会得到这个?:(“a”打印正常,但“b”仅使用 %p 或通过 *b 打印)
[编辑] 整个代码以澄清和解决一些评论问题:
#include <ansi_c.h>
void printVar(int *a, float *b)
{
printf("%d\n", a);//why does "a" print at all?
printf("%d %p\n", a, b);// when "b" prints only using %p
//printf("%d %f", a, b);// but fails on parameter mismatch using %f
printf("%d %f\n" , *a, *b);// prints normally (as expected)
}
int main()
{
int a, *pA;
float b, *pB;
char s[100], *pS;
pA = &a;
pB = &b;
pS = &s[0];
printVar(pA, pB);
getchar();
return 0;
}
***[编辑 2] 如果取消注释 3rd printf,则解决有关实际内容的一些评论
我收到以下两个运行时通知,然后在第 3 行中没有得到 printf 的输出: