将结构传递给函数

时间:2015-12-21 22:01:05

标签: c function struct

所以我试图将我的结构传递给一个函数,我也试图将我的变量赋给结构,这似乎不起作用。我也不知道它有什么问题。

这是我的代码的外观:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define ACE      1;
#define CardSize 52
#define colors   4

struct MyCards {
    int *cards;
    char *color[4];
};

void count(struct MyCards record);

int main() {
    struct MyCards record;
    count(record);

    system("pause");
    return 0; 
}

void count(struct MyCards record) {
    int i, j, f;
    // I actually want to put this variable and the values into the struct, how do i do it?
    char *color[4] = { "Diamon", "Heart", "Spade", "Clubs" };
    record.cards = malloc(CardSize * sizeof(int));
    for (f = 0; f < 4; f++) {
        for (i = 0; i < 13; i++) {
            record.cards[i] = (i % 13) + 1;
            printf("%d of %s\n", record.cards[i], color[f]);
        }
    }
}

正如你可能看到的那样,我注意到的事情,我也想把变量和我分配给它的值,但我不知道怎么做,也会喜欢那里的帮助。

2 个答案:

答案 0 :(得分:1)

C使用pass-by-value。 record内的countrecordmain的变量不同 - 调用该函数时会生成一个副本。

如果您希望main看到更改,您需要return更改的对象(在这种情况下,您不会首先将其传入,在此示例中),或者使用通过将指针传递给对象来实现的pass-by-reference。

返回对象看起来像:

struct MyCard count(void)
{
    struct myCard record;
    // ... do stuff with record ...
    return record;
}

通过引用传递看起来像:

void count(MyCard *p_record)
{
    // ... do stuff with (*p_record)
}

您还希望record.color[f] = color[f];作为f循环的第一行。并且(正如您上次发布的有关此代码的讨论),您应该使用stringchar const *,而不是char *

答案 1 :(得分:1)

你必须传递一个指向结构的指针才能编辑它,或者你只在函数的堆栈中编辑变量,一旦函数返回就会删除它。尝试将&record传递给您的函数。

同样改变原型:你必须接受指向结构的指针。

如果有指针,要解析结构,必须使用->运算符。让我们举个例子:

records->cards[i] = ...