【问题标题】:copy three Arrays to 2 dim Array in C将三个数组复制到 C 中的 2 个暗淡数组
【发布时间】:2023-03-14 00:43:02
【问题描述】:

我想将三个 1dim 数组复制到一个 2dim 数组(矩阵)。

double ary2A[4] = { 0.1, 1.1, 2.1, 3.1 };
double ary2B[4] = { 0.2, 1.2, 2.2, 3.2 };
double ary2C[4] = { 0.3, 1.3, 2.3, 3.3 };

double ary1[3][4];

所以,现在我想将 ary2A、ary2B、ary2C 复制到 ary1 中。我怎样才能用 Pointern 做到这一点?

我的第一步是:

(*ary1)[4] = *ary2A;

但这是错误的,因为我说 ary1 的第一个块的地址是值 0.1.. 如果我说

(*ary1)[4] = ary2A;

我变成了一个错误:“从不兼容的类型 'double[4]' 分配给 'double'”

我该如何解决这个问题?我要检查原理..

【问题讨论】:

    标签: c arrays copy


    【解决方案1】:

    ary1[0] = ary2A; 会将ary2A 存储在索引0ary1 中。 不编译

    ary1[1] = ary2B; 将在ary1 的索引1 处存储ary2B 不编译

    等等

    您的代码中有两个问题:

    • 您正在将一个 double 数组存储到一个 double 中
    • 您正在将索引 4 索引到大小为 4 的数组中,您超出了范围。

    如果要创建数组的真实副本,则需要执行内存复制。你可以这样做:

    memcpy(ary1[0], ary2A, sizeof(double) * 4);
    

    这会将4个doubles的字节从ary2A复制到ary1[0]

    memcpy(ary1[1], ary2B, sizeof(double) * 4);
    

    这会将doubles的4个字节从ary2B复制到ary1[1]

    等等……

    【讨论】:

    • 好的,我该如何解决这个问题?有什么办法可以用 Pointern 和 Adress 解决这个问题吗??
    • 其实如果你想使用=,你将在数组之间共享内存。这意味着如果您修改一个,您将修改另一个。那是你想要的吗? mempy 解决方案为您提供了一种不在数组之间共享数据的方法。这取决于您想对数据数组做什么。
    • 不,您不能将= 与数组一起使用,句号。没有任何“内存共享”。
    • @Alrick 你错了。鉴于定义,您不能写arr[0] = A。或者你可以,但它不会编译。
    • @AnttiHaapala 好的,它只适用于指针,而不适用于数组,你是对的。是不是因为这样声明的数组是在函数调用时分配在栈上的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 2011-05-14
    • 1970-01-01
    • 2011-05-08
    相关资源
    最近更新 更多