c++ - 在不同函数中更改结构中的值

标签 c++ c arrays struct

好的,所以我正在尝试学习一些基本的 c 语言,因为我需要在当前的工作中了解这些知识。我习惯了 Java,在访问和更改结构成员的值时遇到了一些麻烦。

我尝试构建的程序是一个简单的扑克客户端。 我有以下结构:

typedef struct kort{
      int draget;
      char farg;
      int nummer;
      struct kort *next;
  }kort; `

我还有一个名为“blandaKort()”的函数,它创建结构的 52 个成员并将它们添加到数组中,分配花色和数字。代码如下:

void blandaKort(){

   char farg[4]={'S','K','R','J'};
   int nummer[14]={0,2,3,4,5,6,7,8,9,10,11,12,13,14};
   kort kortArray[52]; 
   int tempRaknare=0;
   int i;
   int j;
   kort *huvud=NULL;

   for(i=0; i<=3; i++){
           for(j=1; j<=13; j++){
           kort *huvud=NULL;
            //  kort k;

              kort *k;
              k=(kort*)malloc(sizeof(kort));

              k->farg=farg[i];
              k->nummer=nummer[j];
              k->draget=0;
              huvud=k;

            //  k.farg=farg[i];
            //  k.nummer=nummer[j];
              kortArray[tempRaknare]=*k;
              tempRaknare++;  
         }
 }
 tempRaknare, i, j =0;

 delaHand(kortArray);

delaHand() 函数获取纸牌数组并随机选择两张纸牌。我想要完成的是将我的标志“draget”设置为 1,它告诉我绘制了哪些牌。代码如下:

void delaHand(kort kortArray[]){

 srand(time(NULL));
 int x = rand() % 52 + 1;
 int y = rand() %52+1;

 kort *k;
 k=(kort*)malloc(sizeof(kort));

 kort kortHand[2];
 //if(kortArray[x].draget!=1){
     kortHand[0]=kortArray[x];
     *k=kortArray[x];
     k->draget=1;
     kortArray[x]=*k;

   //  }
 //if(kortArray[y].draget!=1){
     kortHand[1]=kortArray[y];
     kortArray[y].draget=1;

.....

当我打印 kortHand[] 的成员时,它显示了正确的花色和号码,但变量 draget 保持不变。 干杯

最佳答案

以下在功能上等同于您发布的代码。不过,我做了一些更改,所以请指出任何需要澄清的地方。

typedef struct _kort {
    int draget;
    char farg;
    int nummer;
    struct _kort *next;
} kort;

void blandaKort(void){

    char farg[4] = { 'S', 'K', 'R', 'J' };
    kort kortArray[52];
    int i;

    for(i = 0; i < 52; i++){
        kortArray[i].farg   = farg[i / 13];
        kortArray[i].nummer = i % 13 + 2;
        kortArray[i].draget = 0;
    }

    delaHand(kortArray);
}

void delaHand(kort kortArray[]){

    srand(time(NULL));
    int x = rand() % 52 + 1;
    int y = rand() % 52 + 1;

    // Note: the valid indexes of kortArray are 0 - 51.
    // x and y will have values that range from 1 - 52.
    // This is probably not what you want.

    kortArray[x].draget = 1;
    kortArray[y].draget = 1;

    // ...
}

当您只想复制指针时,您的基本问题是复制结构。例如。 *k = kortArray[x]; 复制结构的值,这样您现在就有了指向恰好具有相同值的两个结构的指针。相反,k = &(kortArray[x]); 将导致两个指针都指向内存中的同一结构。上面的代码通过简单地总是直接引用数组来避免这个问题。

关于c++ - 在不同函数中更改结构中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9409420/

相关文章:

c++ - CodeRunner 和多文件项目

c++ - 最多只能打印数组的条目两次

c++ - "undefined reference"到静态字段模板特化

c - 在 Keil 中使用 Arcom 的 C 嵌入式程序的目标和板

javascript - 单击按钮后如何显示元素?

c++ - Boost.Asio deadline_timer 没有按预期工作

c - 如何使两个双指针相等

c - 从字符数组中扫描整数

ios - UISegmented 控件 ObjectAtIndex 替换 swift

c - 使用 bsearch 其键值相当于数组元素,即指向 c 中 char 的指针