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

C语言如何不使用memcpy将数组指针指向内容赋值给新数组

问题原因

你代码里的b = p;写法存在两个本质问题,无法通过编译:

  • C语言中数组名是不可修改的左值,不支持直接用=运算符对整个数组做批量赋值,这是语法层面的硬性限制
  • p的类型是指向长度为3的int数组的指针(int (*)[3]),而数组名b在表达式中退化为int*类型指针,二者类型不兼容,直接赋值会触发编译器类型错误
无memcpy的实现方案

不需要依赖memcpy的情况下,最直接的实现方式是通过循环逐元素完成拷贝:数组指针p指向数组a,对p解引用即可拿到它指向的整个数组,通过下标访问逐元素给b赋值即可,运行后就能得到你预期的123输出。

修正后的完整代码如下:

#include <stdio.h>
int main(void)
{
    int a[3] = {1,2,3},
        b[3];
    int (*p)[3] = &a;

    // 逐元素拷贝p指向的数组内容到b
    for(int i = 0; i < 3; i++) {
        b[i] = (*p)[i];
    }

    for(int i = 0; i < 3; i++) {
        printf("%i", b[i]);
    }
    return 0;
}

注意:*p必须加括号,因为下标运算符[]的优先级高于解引用运算符*,如果写*p[i]会被编译器解析为*(p[i]),属于非法内存访问,会触发运行时错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:18:18