c - 使用指针点更改结构字段时出现指针错误

标签 c pointers struct

我正在尝试更改结构内部的字段,我正在使用 -> 来这样做,但是我的编译器给我一个错误,建议我使用 ->。我不确定为什么。我是否错误地实例化了我的结构实例?

#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/

相关文章:

C++链表简单题

c++ - 为什么我得到一个无效指针?

c - 如何将字符串值添加到结构中?

c - 嵌套循环意外行为

c - 从函数返回结构体数组 - C 编程

c++ - 为什么指针以半字节而不是数组中的字节递增?

C 用循环初始化结构

c++ - 如何将字符串转换为 IP 地址,反之亦然

c - 在 Unix/Solaris 中验证用户名

c++ - 使用cgo调用c库的golang时未检测到sanitizer-leak