数据类型简介

时间:2011-12-31 18:39:55

标签: c

我刚刚开始学习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 个答案:

答案 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的序列,并用双引号定义。单个字符用单引号定义。