2016-11-06 75 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

_ 「我怎麼能一個const char指針的值賦給一個char?」 _問題是,___爲什麼___ –

+0

只是獲得的價值?那個位置。如果有更好的方法。它是什麼或我應該看什麼? – user2300867

+0

如果您在程序運行過程中使用卡的標識符(可能使用'enum')而不是其文本名稱,則可能會更容易。你可以使用他們的文本名稱來輸出給人類。 –

回答

1

我怎麼能一個const char指針的值賦給一個char「

你不應該怎麼做?您需要打印整個名稱而不僅僅是名稱的第一個字符

您正在檢索納克指針常量字符串所以代碼應該是這樣的:

const char *f = wFace[2];

而且

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

,比 aCard.face = f;將工作。

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 char *' – sg7

+0

謝謝,但這是一個好習慣嗎?這似乎有點破解。 – user2300867

+0

不!一點也不!這是一個適當的任務!看看:'const char * nameOfTheCard =「Four」; printf(「%s」,nameOfTheCard);' – sg7

4

char f = wFace [2];

f是字符,其範圍可能是[-128,127](不是必需的)。 值wFace[2]是指向內存地址的指針。 你在這裏分配不同的類型,你期望什麼?


這是wFace[2]值可能是什麼:

wFace[2] == 0x1000一些內存地址。 再看看內存

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

如果你這樣做*wFace[2]它會給你「H」回來;如果你這樣做*(wFace[2]+1)它會給你'我'回來。


你更有可能想要的可能是:

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

好。據我所知,但我怎樣才能從指針獲取char值? – user2300867

+1

@ user2300867解引用指針,但它只會給你指針指向的第一個字符。 –

+0

如果我可以使用printf(「%s」,wFace [2])打印這個值,爲什麼我不能只將wFace [2]值賦給一個字符串或字符變量。 – user2300867