You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将已定义的二维矩阵作为参数传入双指针类型的C语言函数

二维数组传入双指针形参函数的解决方法

你定义的double A[3][3]是数组的数组,和函数形参的double**类型内存布局完全不同,无法直接传入,需要额外构造行指针数组再传参。

可行实现方案

方案1:构造行指针数组适配现有函数签名

如果无法修改trans的函数定义,用这种方法适配:

// 原始矩阵定义
double A[3][3] = {1,1,1, 1,1,1, 1,1,1};
// 构造和矩阵行数等长的指针数组
double *row_pointers[3];
for (int i = 0; i < 3; i++) {
    row_pointers[i] = A[i]; // 每个指针指向对应行的首地址
}
// 传入指针数组,数组名自动退化为double**类型
double** result = trans(row_pointers);

如果需要处理可变长度的矩阵,可以动态申请行指针数组的内存,用完后记得释放即可。

方案2:修改函数签名(推荐,无额外开销)

如果有权限调整trans的实现,优先修改参数适配二维数组的连续内存布局:

// 固定第二维长度的写法
double** trans(double (*A)[3], int rows);
// C99及以上支持的通用可变长度写法
double** trans(int rows, int cols, double A[static rows][cols]);

修改后可以直接传入原始二维数组,不需要额外构造指针数组,也没有额外的内存开销:

double** result = trans(A, 3);

避坑提示

不要尝试直接强转传参:trans((double**)A)是严重错误的写法。double A[3][3]的内存是连续存储的9个double值,直接强转后会把前8字节的double值当做指针地址寻址,必然触发段错误,完全无法正常运行。


内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:27:03