所以我试图将我的结构传递给一个函数,我也试图将我的变量赋给结构,这似乎不起作用。我也不知道它有什么问题。
这是我的代码的外观:
#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]);
}
}
}
正如你可能看到的那样,我注意到的事情,我也想把变量和我分配给它的值,但我不知道怎么做,也会喜欢那里的帮助。
答案 0 :(得分:1)
C使用pass-by-value。 record
内的count
与record
中main
的变量不同 - 调用该函数时会生成一个副本。
如果您希望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
循环的第一行。并且(正如您上次发布的有关此代码的讨论),您应该使用string
或char const *
,而不是char *
。
答案 1 :(得分:1)
你必须传递一个指向结构的指针才能编辑它,或者你只在函数的堆栈中编辑变量,一旦函数返回就会删除它。尝试将&record
传递给您的函数。
同样改变原型:你必须接受指向结构的指针。
如果有指针,要解析结构,必须使用->
运算符。让我们举个例子:
records->cards[i] = ...