今年计算机专业大一。C语言学的还不错。今天有同学问我一个古怪的问题。
在VC++6.0下测试。我们一般都用单引号圈起一个字符给一个char变量赋值,比如char x='A';
可是如果硬是要用双引号的话。比如char x="A";
写了一个程序。
#include <stdio.h>
int main()
{
char x;
x='A';
printf("%c%5d\n",x,x);
x="A";
printf("%c%5d\n",x,x);
return 0;
}
运行结果是:
A 65
? -92
那个-92是怎么来的?很疑惑。
"A"为什么是个字符串?它里面明明只有一个字符- -
追答因为你用了双引号,“A”占两个字节,A后面还有一个字符'\0'
追问那如果我x="" 。是不是""就代表一个字符'\0'了?
追答不是,即使是“”,它包含一个字符,它的性质也是字符串,因为你用了双引号。
只有在初始化的时候能给char类型变量赋值
在初始化之外,可以对指向字符常量的指针赋值
const char *p;
p="Hello";
有个“Hello”的字符串常量。
把指针p指向它,但它的值不可以改变,指针的指向可以改变。
不同编译器对于此行为的处理都不一致。也没有这个标准吧。学习考虑一些偏门奇怪的东西,并不是为了用它,而是为了避免犯那样的“错误”。
7: x=(char)"A";//需要强制转换,编译器都不让你过这是从程序里截取出来的,可以看到的x竟然是printf里面字符串地址低字节,你能想的通么。。
确实很怪异,不用太纠结,你已经知道这样是错误的了。
每次输出的结果都一样都是-92。把A换成B也是一样。