2011-12-31 57 views
3

我刚刚开始学习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 

回答

6

的问题在这里:

char charVar = "W"; 

你可能是指:

char charVar = 'W'; 

"W"是一个字符串。 'W'是一个字符。后者是你想要的。

3

它应该是'w'而不是"w"。后者是一个以零结尾的字符串,即它是一个指向char数组的指针。

3

"W"不是字符而是字符串常量。你想要的是'W'

而一个字符串常量是一个指向字符数组的指针(在这种情况下为{ 'W', 0 }),因此警告:“初始化使指针中的整数不经过转换”。

这里的“整数”是指被理解为任何整数类型(字符,短,整型,长,很长很长的编译器定义它,他们的无符号变体,以及其众多的typedef ...)

2

"W"代表char*或C字符串。
'W'代表一个char或单个单字节字符,并且是您想要的。

单/双引号是区分两者的区别。

1

char charVar="W"; 在这个例子中是不正确的,因为“W”是一个字符串,并被视为指向字符数组的指针。将其更改为'W'以使其成为角色。

0

在C中,字符串和字符之间有区别。实际上,字符串是字符序列,定义为char[length]或甚至char*(可变长度)。因为它是多个char s,它需要一个“指针”(不用担心,我不会解释)。

为了让C编译器知道char和string之间的区别,它发明了两种引号:单引号和双引号。 A char使用单引号('W'),字符串使用双引号("W")。

你可以声明这样的字符串:虽然单个字符声明如下

char* myString = "this is a string"; 

char charVar = 'W'; 

底线:一个字符串是char个序列,并与定义双引号。一个字符用单引号定义。