c语言的字符单引号问题

例题为hanoi塔问题 谭书代码如下
#include<stdio.h>
int main()
{int n;
void hanoi(int,char,char,char);
while(~scanf("%d",&n))
{
hanoi(n,'a','b','c'); //这里输入字符要加引号
printf("\n\n");
}
return 0;
}

void hanoi(int x,char a,char b, char c)
{
void move(char,char);
if(x==1)
move(a,c);
else
{hanoi(x-1,a,c,b);
move(a,c); //而这里却不用加'' ,为什么
hanoi(x-1,b,a,c);
}

}
void move(char a,char b)
{
printf("%c to %c\n",a,b);

}

小弟实在迷惑,求大佛解救

前面加单引号的是常量字符,就是'a'、'b'、'c'这些字符,是不能够赋值成别的字符的,
而下面的a b c是char型的变量,他们可以被赋值为不同的字符,比如你写a='z',a='g'都行。
或者你把你的hanoi函数部分改成void hanoi(int x,char i,char j,char k)
相应函数体里面的a b c也分别改成i j k。这样就不容易弄混了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-25
hanoi(n,'a','b','c'); //这里输入字符要加引号——这里的函数调用,a、b和c表示柱子代号,是字符常量,所以要加单引号

move(a,c); //而这里却不用加'' ,为什么——这里的函数调用所用的柱子代号已经在变量a和c中了。a和c是变量,所以不加单引号。追问

柱子代号。。。。我不懂

追答

对呀,起初盘子不是套在a柱子上的吗。

本回答被提问者采纳
第2个回答  2013-01-20
意义不一样的。
main函数那里的hanoi(n,'a','b','c');是调用的子函数, ‘a’'b''c'代表的是字符,传递给给子函数hanoi(int x,char a,char b, char c)的形参char a,char b, char c 。
在子函数 hanoi(int x,char a,char b, char c)这里, a b c 是变量名,在子函数内部进行递归调用hanoi(x-1,a,c,b);时 a, b ,c 仍是是变量名,他们对应的值分别是‘a’ ‘b’ ‘c’这三个字符而已。

也就是说你完全可以把hanoi(int x,char a,char b, char c)中的 a b c换成其他名字比如hanoi(int x,char m,char n, char k) , 然后内部递归调用时也相应地换为其他名字,但你在主函数中调用hanoi(n,'a','b','c');时传递给子函数形参的值仍是m='a',n='b',k='c'。
第3个回答  2013-01-20
加引号的是字母常量,比如’a'只是一字母,不加的char类型的变量。
相似回答