我刚刚开始学习C并直接从一本书中复制了它。有人能告诉我为什么这不起作用吗?
#include <stdio.h>
int main (void)
{
int integerVar = 100;
float floatingVar = 331.79;
double doubleVar = 8.44e+11;
char charVar = "W";
_Bool boolVar = 0;
printf ("integerVar = %i\n", integerVar);
printf ("floatingVar = %f\n", floatingVar);
printf ("doubleVar = %e\n", doubleVar);
printf ("doubleVar = %g\n", doubleVar);
printf ("charVar = %c\n", charVar);
printf ("boolVar = %i\n", boolVar);
return 0;
}
我收到此错误:
datatypes.c: In function ‘main’:
datatypes.c:8: warning: initialization makes integer from pointer without a cast
答案 0 :(得分:6)
这里的问题:
char charVar = "W";
你可能意味着:
char charVar = 'W';
"W"
是一个字符串。 'W'
是一个字符。后者就是你想要的。
答案 1 :(得分:3)
应该{{1}}而不是'w'
。后者是一个以零结尾的字符串,即它是一个指向char数组的指针。
答案 2 :(得分:3)
"W"
不是char而是字符串常量。你想要的是'W'
。
字符串常量是指向chararacter数组的指针(在本例中为{ 'W', 0 }
),因此警告:“初始化从指针生成整数而没有强制转换”。
这里,“整数”应理解为任何整数类型(char,short,int,long,long long,用于定义它的编译器,它们的无符号变体,以及它们的众多typedef ......)
答案 3 :(得分:2)
"W"
代表char*
或C字符串
'W'
表示char
或单个1字节字符,是您想要的。
单/双引号是两者的区别。
答案 4 :(得分:1)
第char charVar="W";
行
在此示例中不正确,因为“W”是一个字符串,并被视为指向字符数组的指针。将其更改为'W'
以使其成为一个角色。
答案 5 :(得分:0)
在C中,字符串和字符之间存在差异。实际上,字符串是字符序列,定义为char[length]
或甚至char*
(可变长度)。因为它是多个char
,它需要一个“指针”(不用担心,我不会解释)。
为了让C编译器知道char和string之间的区别,它发明了两种引号:单引号和双引号。 char
使用单引号('W'
),字符串使用双引号("W"
)。
你可以声明一个这样的字符串:
char* myString = "this is a string";
虽然单个char声明如下:
char charVar = 'W';
底线:字符串是char
s的序列,并用双引号定义。单个字符用单引号定义。