gpt4 book ai didi

c - C中结构体(二维数组)的静态成员(二维数组)

转载 作者:行者123 更新时间:2023-11-30 16:58:41 29 4
gpt4 key购买 nike

我有一个关于结构静态成员的问题这是场景:

  • 即使从另一个 C 文件中的函数退出后,也需要 2d 数组变量来保留其值。从另一个 C 文件中的 main() 到该函数的后续调用将使用最后一个值并继续进行计算以生成和更新新值(也保留)。所以,我认为我需要对该数组使用静态。

  • 二维数组是二维结构的成员。我需要 2D 结构来标识 2d 数组。假设我得到了identity[row][column]和member[5][5],我需要在main()的整个调用过程中静态定义该成员。但据我所知,C 中不允许静态结构成员。

我正在尝试的代码:

//in function.h

#define row 2
#define column 5
int function(int rowNUM);

//in function.c
int function(int rowNUM)
{
typedef struct {
static int member[5][5];
int y[5][5];
int forg;
} mystruct;

mystruct identity[row][column];// declare the identity as structure array

int columnNUM;
int c;
int d;

//----try to initialize member to 1
for (columnNUM=0;columnNUM<column;columnNUM++)
{
for (c=0;c<5;c++)
{
for(d=0;d<5;d++){
identity[rowNUM][columnNUM].member[c][d]=1;
}
}
}


//----try to update member--- The values should retain for subsequent call from main
for (columnNUM=0;columnNUM<column;columnNUM++)
{
for (c=0;c<5;c++)
{
for(d=0;d<5;d++){
identity[rowNUM][columnNUM].member[c][d]=1+identity[rowNUM][columnNUM].member[c][d]; // to update member new value
}
}
}
}


// in main.c

main()
{
function(1);
function(2);// member here is in different identity from function (1)
function(1);//member should retain its value from function(1)
function(2);//member should retain its value from function(2)
}

如果这不是实现目标的方式,欢迎任何其他建议。我对编程很陌生,请帮助我。

最佳答案

您已经定义了一个二维结构数组,这确实很难静态初始化,因为每个结构都包含整数矩阵。另外,不能只有结构体的一个成员是静态的,整个结构必须定义为静态

我能想到的最简单的方法是定义一个 mystructs 的静态矩阵和一个辅助变量来在第一次调用时对其进行初始化,即,

//in function.c
#include <stdbool.h>

int function(int rowNUM)
{
typedef struct {
int member[5][5];
int y[5][5];
int forg;
} mystruct;

// helper flag
static bool first_call = true;

// this is a matrix of (row x cols) mystructs
static mystruct identity[row][col];

if (first_call) {
/* initialize the matrix however you want
BUT remember to set first_call to false!
*/
first_call = false;
}

// rest of function ...
}

如果您不想保留 yforg 成员的值(forg 代表什么?是拼写错误吗?),您应该拆分将结构一分为二,但我不明白为什么要保留结构的某些值并丢弃其他值,除非它们是时间变量。

如果 yforg 是时间变量,那么您绝对应该将结构定义分成两部分

另一种方法是将指向矩阵的指针作为参数传递给函数,这样您就可以在不使用静态变量的情况下维护状态

int function(int rowNUM, mystruct **identity)

但请注意,虽然大多数时候数组会衰减为指针(您可以在与 this one 类似的问题中找到更多信息),但它们并不相同 thing .

关于c - C中结构体(二维数组)的静态成员(二维数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38602610/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com