c - 结构中的数组

标签 c arrays structure

我是 C 的新手,在结构中嵌入数组类型时遇到问题。以下是我的问题的示例:

typedef struct {
    double J[151][151];
} *UserData;

static int PSolve(void *user_data, N_Vector solution)
{
UserData data;
data = (UserData) user_data;

double J[151][151];
J = data->J;

/* Solve a matrix equation that uses J, stored in 'solution' */

return(0);
}

当我尝试编译这个时,我得到 错误:从类型“double (*)[151]”分配给类型“double[151][151]”时类型不兼容

我目前的解决方法是在代码中将“J[x][y]”替换为“data->J[x][y]”来求解矩阵方程,但分析表明这是效率较低。

将参数更改为 PSolve 不是一个选项,因为我使用的是 sundials-cvode 求解器,它规定了参数的类型和顺序。

最佳答案

typedef struct {
    double J[151][151];
} UserData; // This is a new data structure and should not a pointer!

static int PSolve(void *user_data, N_Vector solution)
{
UserData* data; // This should be a pointer instead!
data = (UserData*) user_data;

double J[151][151];
memcpy(J, data->J, sizeof(double) * 151 * 151); // use memcpy() to copy the contents from one array to another

/* Solve a matrix equation that uses J, stored in 'solution' */

return(0);
}

关于c - 结构中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5071410/

相关文章:

c - 为什么这种故意不正确地使用 strcpy 的方法不会严重失败?

转换时间格式

python - Numpy Array Division - 不支持的操作数类型/: 'list' and 'float'

visual-studio-code - 项目结构到图形布局(VSCode)?

显示结构体字段在运行时堆栈中存储顺序的代码

C - 列出文件夹和所有子文件夹中包含的文件

有人可以帮我找到导致段错误(核心转储)的错误吗?

java - 不忽略一个值?

java - 以通用方式处理 JSON 响应

C:结构,简单,完整的短程序代码显示