我正在尝试更改结构内部的字段,我正在使用 ->
来这样做,但是我的编译器给我一个错误,建议我使用 ->
。我不确定为什么。我是否错误地实例化了我的结构实例?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef enum suit_s {DIAMONDS, CLUBS, HEARTS, SPADES} Suit;
enum suit_s nCard;
int rankR;
int suit1;
typedef struct card_s {
int rank;
Suit suit;
} *Card;
int randCard(Card* rCard);
int getSuitName(Card* rCard);
int main(int argc, char *argv[]){
Card *rCard;
srand( (unsigned)time( NULL ) );
randCard(rCard);
getSuitName(rCard) ;
return 0;
}
int randCard(Card* rCard) {
int max_number = 10;
int minimum_number = 2;
rankR = rand() % (max_number + 1 - minimum_number) + minimum_number;
suit1 = rand() % (4 + 1 - 1) + 1;
if (suit1 == 1){
nCard = DIAMONDS;
}else if (suit1 == 2){
nCard = CLUBS;
}else if (suit1 == 3){
nCard = HEARTS;
}else if (suit1 == 4){
nCard == SPADES;
}
rCard->rank = rankR; // error here
rCard->suit = nCard; // error here
}
编译日志:
main.c: In function 'randCard':
main.c:42:8: error: '*rCard' is a pointer; did you mean to use '->'?
rCard->rank = rankR;
^~
->
main.c:43:8: error: '*rCard' is a pointer; did you mean to use '->'?
rCard->suit = nCard;
^~
->
最佳答案
你得到这些错误是因为 rCard
是类型 Card *
并且 Card
是指向指向的指针的 typedef
struct card_s
:
typedef struct card_s {
int rank;
Suit suit;
} *Card;
^^
在randCard()
中,参数rCard
的类型为Card *
,使得rCard
指向指向 struct card_s
的指针。
要解决此问题,请声明 Card
类型的 rCard
参数或像这样修改 typedef
:
typedef struct card_s {
int rank;
Suit suit;
} Card;
Card
现在是 struct card_s
的别名。
关于c - 使用指针点更改结构字段时出现指针错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52340980/