将角色传递给char *

时间:2010-12-28 20:56:40

标签: c pointers char

我有这段代码

int main()
{
    char a[100];
    a[0]='a';
    a[1]='b';
    fun(a[0]);
}

void fun(char *a)
{
    printf("%c",a);
}

但我将一个字符传递给指针。指针不会指向一个地址???

4 个答案:

答案 0 :(得分:3)

a[0]保存值97(ASCII中为'a')。 fun会在97中收到a的值,但会将其解释为地址。但是,由于您只是将其传递给printf,并且碰巧错误地使用了将%c解释为a的{​​{1}}格式化程序,您最终会无论如何打印char

当然,在大多数编译器上,您应该收到警告:

  1. 您正在将整数转换为指针(当您调用a时)而不将其转换为指针。
  2. 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);
}