【发布时间】:2015-03-27 03:58:00
【问题描述】:
我只是在 C 编程中试验一段代码。并开始知道一个奇怪的行为。 嗯...由于我不是C语言专家,所以我不知道它是奇怪还是正常。
基本上我的问题都是关于以下两行代码之间的区别:-
char a = 'h'; // here variable a is not an array of "char"
和
char a = 'hi'; //here variable a is not an array of "char" as well (i don't know if compiler assumes it as an array or not but , at least i didn't declared it that way )
我使用了以下代码
第一:-
char a =0;
for(;a<'hi';a++)
{
printf("%d= hello world \n",a);
}
秒:-
char a;
for(a='h';a<'hi';a++)
{
printf("%d= hello world \n",a);
}
上面提到的两个循环都会永远运行,
谁能告诉我为什么会这样?
我可能遗漏了一个非常基本的编程概念。请帮帮我
【问题讨论】:
-
解释你是如何等待无限长的时间的:-)
-
'hi'是错误的,2 个字符表示它是一个字符串,需要双引号,"hi"衰减为一个指针。正确的声明是const char * a = "hi";或char a[] = "hi" -
顺便说一句,如果您编译时包含所有警告和调试信息(例如
gcc -Wall -Wextra -g),编译器会警告您(然后您可以使用gdb调试器) -
相信编译器。如果它警告你你的代码是错误的。并阅读undefined behavior
-
Multichar 常量是实现定义的。不同的编译器(或构建平台目标)可以产生不同的值。您通常不能依赖它,并且大多数编译器都会警告您。你总是可以避免使用它们,所以不要。
'foo'和"foo"是完全不同的东西。