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

C语言使用指针运算拷贝二维数组报数组类型赋值错误如何解决

二维数组单层循环拷贝报错解决方案

报错原因

你遇到的编译报错是因为指针类型不匹配:
newAry是变长二维数组名,默认的指针类型为指向长度为numCols的double数组的指针(double (*)[numCols])。当你执行*(newAry + ctr)时,得到的返回值是double[numCols]类型的数组,C语言语法不允许直接对数组整体赋值,因此触发assignment to expression with array type报错。

单层循环拷贝是可行的,不需要强制使用两层嵌套循环

C语言中多维数组在内存中是按行连续存储的,只要调整指针步长匹配单元素长度,就可以用单层循环完成拷贝,有两种常用修改方案:

方案1:修改赋值行的指针类型

将newAry强转为double*类型,让指针运算的步长等于单个double元素的大小,匹配源指针pAry的步长:

void copyAry(double *pAry, int numRows, int numCols)
{
    double newAry[numRows][numCols];
    int end = numRows * numCols;
    int ctr = 0;

    for( ; ctr < end; ctr++) {
       // 强转newAry为double*后再做偏移
       *((double*)newAry + ctr) = *(pAry + ctr);
    }
    return;
}

方案2:直接使用标准库内存拷贝函数

不需要自己写循环,调用memcpy直接完成连续内存的拷贝,效率更高代码更简洁:

#include <string.h> // 需要先引入头文件

void copyAry(double *pAry, int numRows, int numCols)
{
    double newAry[numRows][numCols];
    memcpy(newAry, pAry, sizeof(double) * numRows * numCols);
    return;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:27:00