2016-11-06 10 views
0

Cを使いこなし、ポインタとその使い方を理解しようとしています。私はポインタがメモリ位置への参照であると理解しています。私は基本と簡単な例を得ると思いますが、const charポインタの値をcharにどのように割り当てることができますか?const char *の値を得るにはどうすればいいですか?

私は警告を受け取ります。

incompatible pointer to integer conversion initializing 'char' with an expression of type 'const char *' [-Wint-conversion] 

タイプの違いは分かりますが、解決方法を教えてください。ここで

コードです:

#include <time.h> 
#include <stdbool.h> 

#define SUITS 4 
#define FACES 13 
#define CARDS 52 
#define HAND_SIZE 5 

struct Card { 
    char suit; 
    char face; 
}; 

void dealHand(const char *wFace[], struct Card *wHand[]); 

int main(void) 
{ 
    //initialize deck array 
    unsigned int deck[SUITS][FACES] = {0}; 

    srand(time(NULL)); // seed random-number generator 

    //initialize face array 
    const char *face[FACES] = 
     {"Ace", "Deuce", "Three", "Four", 
     "Five", "Six", "Seven", "Eight", 
     "Nine", "Ten", "Jack", "Queen", "King"}; 

    struct Card *hand[HAND_SIZE]; 
    dealHand(face, hand); //deal the deck 

} 

//deal cards in deck 
void dealHand(const char *wFace[], struct Card *wHand[]) 
{ 
    unsigned int c = 0; 
    char f = wFace[2]; 
    struct Card aCard; 
    aCard.face = f; 
    wHand[0] = &aCard; 
} 

私はライン上で警告を受ける:(定数*)を使用して、それをキャスティング

char f = wFace[2]; 

は解決策ではないようです。

+5

_ "どのように私がcharへのconst char型のポインタの値を割り当てることができますか?" _疑問は、なぜ___、ある___ –

+0

単純に値を取得するには?その場所。より良い方法があれば。それは何ですか?また何を調べなければなりませんか? – user2300867

+0

テキスト名ではなく、プログラムの動作の中で(おそらく 'enum'を使って)カードの識別子を使って作業する方が簡単かもしれません。人間に出力するためにテキスト名を使用することができます。 –

答えて

1

私がcharへのconst char型のポインタの値を割り当てることができますどのように」

あなたはやるべきではありません名前の最初の文字だけでなく、名前全体を表示する必要があります。

あなたはあなたです

const char *f = wFace[2];

また

struct Card { 
    char suit; 
    const char *face; 
}; 

aCard.face = f;が動作するより:コードは次のようでなければなりませんので、constの文字列へのポインタをngの。

void dealHand(const char *wFace[], struct Card *wHand[]) 
{ 
unsigned int c = 0; 
const char *f = wFace[2]; 
struct Card aCard; 
aCard.face = f; 
wHand[0] = &aCard; 
printf("%s",f); 
} 

出力します:

Three

+0

@ user2300867定数文字列であるwFace [2]を印刷すると仮定します。 const stringを変数にマッチする型に割り当てるには 'const char *' – sg7

+0

ありがとうございますが、これはOKですか?それは少しハックのようです。 – user2300867

+0

いいえ!どういたしまして!これは適切な割り当てです! 'const char * nameOfTheCard =" Four "を見てみましょう。 printf( "%s"、nameOfTheCard); ' – sg7

4

char f = wFace [2];

fは、その範囲はおそらく[-128,127](必須ではありません)です。 の値はwFace[2]で、メモリアドレスへのポインタです。 ここにさまざまなタイプを割り当てていますが、どうしましたか?

wFace[2] == 0x1000いくつかのメモリアドレス:


これはwFace[2]の値は何ができるかです。あなたはそれはあなたが「H」のバックを与える*wFace[2]を行う場合 そして、メモリ

Memory address: 0x1000 0x1001 0x1002 0x1003 
Value stored: H  i  !  0 

を見て。もしあなたが*(wFace[2]+1)なら、それはあなたに私が戻ってくるでしょう。あなたは可能性が高い欲しい


はおそらくです:?

const char *f = wFace[2]; 
+0

。私はそれを理解していますが、ポインタからchar値を取得するにはどうすればいいですか? – user2300867

+1

@ user2300867ポインタを逆参照しますが、ポインタによって指し示される最初の文字のみを返します。 –

+0

printf( "%s"、wFace [2])を使用して値を出力できれば、文字列またはcharの変数にwFace [2]値を割り当てることができません。 – user2300867

関連する問題