我有这段代码
int main()
{
char a[100];
a[0]='a';
a[1]='b';
fun(a[0]);
}
void fun(char *a)
{
printf("%c",a);
}
但我将一个字符传递给指针。指针不会指向一个地址???
答案 0 :(得分:3)
a[0]
保存值97
(ASCII中为'a'
)。 fun
会在97
中收到a
的值,但会将其解释为地址。但是,由于您只是将其传递给printf
,并且碰巧错误地使用了将%c
解释为a
的{{1}}格式化程序,您最终会无论如何打印char
。
当然,在大多数编译器上,您应该收到警告:
a
时)而不将其转换为指针。fun
中的%c
格式化程序应采用printf
,而不是char
。答案 1 :(得分:1)
你正在调用一个在通话时没有原型的函数。 C89说这是允许的,但是确保使用对最终定义的参数正确的参数调用函数是你的问题。由于它们在这种情况下不匹配,因此未定义的行为。
启用更多编译器警告(如果是gcc,则为-Wall
。)
答案 2 :(得分:0)
您没有将角色传递给指针。
fun()期待指向一个角色的指针,但是你传递的是一个角色。这应该会产生语法错误。或者,至少,如果你真的没有声明函数fun(),那就行不通了。
字符是在赋值时复制的整数类型。
答案 3 :(得分:0)
解决方案1:不要使用指针。
void fun(char a);
解决方案2:如果由于某些不明显的原因需要使用指针,请使用&
获取指针并使用*
取消引用指针。
void fun(char *a);
int main()
{
char a[100];
a[0]='a';
a[1]='b';
fun(&a[0]);
}
void fun(char *a)
{
printf("%c",*a);
}