【发布时间】:2013-10-04 21:16:58
【问题描述】:
首先,让我澄清一下,我知道将指针作为参数传递给这些 printf 说明符是不正确的。但是,我很想知道printf 完成后发生了什么。
使用 normal 打印说明符,%d 用于int,%f 用于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 打印)
[edit] 整个代码以澄清和解决一些评论问题:
#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;
}
***[edit 2] 如果取消注释 3rd printf,则解决一些关于实际内容的 cmets
我收到以下两个运行时通知,然后在第 3 行没有输出 printf:
【问题讨论】:
-
这些变量与函数中的变量不同。只需发布一个简短、独立、正确的示例。
-
@self,我会编辑。错误地留下了字符。
-
您在完整程序中将
a和b设置为什么值? (不是pA和pB。) -
"当 "b" 仅使用 %p 打印时" 你是什么意思?您的屏幕截图显示您获得了输出。
-
对所有评论者来说,为了清楚起见,我将发布整个代码。变量的传递与现有代码中显示的一样,这是现在所见的真实输出。
标签: c printf format-specifiers