2011-12-31 9 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'はcharです。後者はあなたが望むものです。

3

'w'ではなく、"w"である必要があります。後者はゼロ終端文字列です。つまり、char配列へのポインタです。

3

"W"は文字ではなく文字列定数です。あなたがしたいのは'W'です。

文字列定数は、文字配列(この場合は{ 'W', 0 })へのポインタであるため、「初期化ではキャストなしのポインタから整数になります」という警告が表示されます。ここで、「整数」のいずれかの整数型として理解されることを意図している

(それを定義コンパイラ、およびその符号なしの変異体、およびその数多くのtypedefのための長い長い文字、短い、int型、長い、...)

2

"W"は、char*またはC文字列を表します。
'W'は、char、または1バイトの1文字を表し、必要なものです。

単一引用符/二重引用符は、二重引用符を区別します。

1

"W"が文字列であり、文字の配列へのポインタとして扱われているため、この例では行char charVar="W"; が正しくありません。これを文字にするには'W'に変更してください。

0

Cでは、文字列と文字の間に違いがあります。実際には、文字列は文字列で、char[length]またはchar*(可変長)と定義されています。それは複数のcharのため、 "ポインタ"が必要です(私は説明しません)。

Cコンパイラがcharと文字列の違いを知るためには、二重引用符(一重引用符と二重引用符)を作成しました。 charは一重引用符('W')を使用し、文字列は二重引用符("W")を使用します。

あなたはこのような文字列を宣言することができます。

char* myString = "this is a string"; 

単一のcharはこのように宣言されている間:

char charVar = 'W'; 

ボトムライン:文字列がchar秒のシーケンスであり、かつで定義されました二重引用符。単一の文字は単一引用符で定義されます。