刚接触 C 并试图理解指针以及如何使用它们。我明白指针是对内存位置的引用,我想我得到了基础知识和简单的例子,但是如何将 const char 指针的值分配给 char?
当我尝试时,我收到警告;
incompatible pointer to integer conversion initializing 'char' with an expression of type 'const char *' [-Wint-conversion]
Run Code Online (Sandbox Code Playgroud)
我了解类型差异,但我该如何解决它。
这是代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
我在线收到警告:
char f = wFace[2];
Run Code Online (Sandbox Code Playgroud)
使用 (const *) 进行转换似乎不是解决方案。
字符 f = wFace[2];
f是字符,它的范围可能是 [-128,127] (不是必需的)。值wFace[2]是指向内存地址的指针。您在这里分配了不同的类型,您期望什么?
这就是wFace[2]可能的值:
wFace[2] == 0x1000一些内存地址。然后看看内存
Memory address: 0x1000 0x1001 0x1002 0x1003
Value stored: H i ! 0
Run Code Online (Sandbox Code Playgroud)
如果你这样做,*wFace[2]它会给你'H'; 如果你这样做,*(wFace[2]+1)它会给你“我”回来。
您更可能想要的是:
const char *f = wFace[2];
Run Code Online (Sandbox Code Playgroud)