更改其他函数中结构中的值
Change value in a struct in a different function
好的,所以我想学习一些基本的c,因为我需要在我的相应工作中知道这一点。我习惯了Java,在访问和更改结构成员的值时遇到了一些麻烦。
我试图构建的程序是一个简单的扑克客户端。我有以下结构:
typedef struct kort{
int draget;
char farg;
int nummer;
struct kort *next;
}kort; `
我还有一个名为"blandaKort()"的函数,它创建了结构的52个成员,并将它们添加到一个数组中,分配一个suit和数字。代码如下:
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;
当im打印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中的对象不是通过引用访问的。所以当你这样做的时候:
kortHand[0] = kortArray[x];
您已经创建了底层对象的副本(如Java中的clone
)。因此,对kortArray[x]
的任何进一步更改都不会影响sortHand[0]
。
相关文章:
- 使用不带参数的函数访问结构元素
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 链表,反向函数,数据结构
- 结构向量中自定义结构函数的内存使用
- C++ 中的嵌套结构函数
- 在结构函数之间传递文件路径 C++ 编辑:修复LNK2019错误
- 如何将值从外部传递到结构函数
- 如果存在具有不同参数的继承成员,为什么对 C++ 结构函数的调用不明确?
- C++结构函数的多个定义
- C++ 另一个标头中的结构函数给出"missing type specifier"
- 如何在C中找到结构/函数的父头文件
- C++二进制文件到结构函数
- C++ 将结构函数作为继承结构中函数的参数传递
- 如何在 main 之外的类中使用结构函数
- 在类中使用结构函数,在基类 c++ 中使用变量
- C++ 结构函数体调用另一个结构函数,同一个模块
- 是存储在对象中的类/结构函数
- Eclipse CDT 在从 std::map 访问时无法解析结构函数
- C++模板自身名称作为模板模板参数在同一模板结构函数内传递
- 如何使用真正的字符串类型来表示类结构函数中的字符串