如何从一组struct指针中取消引用

时间:2014-04-11 05:33:55

标签: c arrays struct dereference

说我有struct

struct card{
  char num;
   char suit;
 };

这个结构指针数组:

struct card *deck[52];

然后这种方法初始化一副牌(这是一个设备驱动因此kmalloc):

static int __init_deck(void){
// allocate some memory
    int i;
    for(i = 0; i < 52; i++){
        deck[i] = kmalloc(sizeof(struct card), GFP_KERNEL);
        if(!deck[i]){
            printk(KERN_ERR "Unable to allocate memory.");
        }
    }

    returnValue = misc_register(&deck_dev);
    if(returnValue){
         printk(KERN_ERR "Unable to register\n");
    }

// give the card structs some values in the deck. 
// Spades
    for(i = 0; i < 13; i++){
                  // why does this not work??
        *(deck[i].num) = (char)i;
        *(deck[i].suit) = 'S';
    }
// Hearts
    for(i = 13; i < 16; i++){
        deck[i].num = (char)i;
        deck[i].suit = 'H';
    }
// Diamonds
    for(i = 26; i < 39; i++){
        deck[i].num = (char)i;
        deckk[i].suit = 'D';
    }
// Clubs
    for(i = 39; i < 52; i++){
        deck[i].num = (char)i;
        deck[i].suit = 'C';
    }

    return returnValue;
  }

我声明了一个大小为52的数组,其中包含指向struct card的指针。我试图明显地尊重数组中某个位置所包含的结构,这样我就可以添加&#34; stuff&#34;到那个结构。为什么不在我的一个案例工作中解除我的引用?

1 个答案:

答案 0 :(得分:4)

您在此处取消引用错误,*(deck[i].num) = (char)i;

首先,您必须取消引用指针,然后才能访问其成员。

 (*deck[i]).num = (char)i;

或使用->运算符:

 deck[i]->num = (char)i;