c - 如何按值发送数组以在c中运行?

标签 c flexible-array-member

我试过类似的东西:

typedef struct vec{
     int sz;
     int v[];
} ff;

int sum(struct vec z){
    int o=0,i;
    for(i=0;i<z.sz;i++)
        o+=z.v[i];
    return o;
}

int main(){
    int test[]={10,1,2,3,4,5,6,7,8,9,10};
    return sum((struct vec)test);
}

但是这个示例代码无法编译。如何按值(不是引用抛出指针)将数组发送给函数?

最佳答案

在 C 中不能按值发送数组。每次尝试将数组传递给函数时,都会将指针传递给第一个值。
要按值传递数组,您可以稍微作弊并将其封装在一个结构中,然后按值发送它(这样它就会被复制)...这是一个肮脏的 hack,as explained here ,但是好吧,如果你真的想要它,它会起作用。
另一种方法是使用给定的指针在函数内部复制数组。

关于c - 如何按值发送数组以在c中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21969095/

相关文章:

c - 替代灵活数组成员,无需动态内存分配

c - 为什么这种具有灵活数组成员的结构初始化无效但对固定大小的数组成员有效?

c - 结构中未调整大小的数组声明

c++ - 用 C 或 C++ 实现插件系统

c - 当我对结构进行浅拷贝时,灵活的数组成员不会被复制

链表中的字符

c++ - ZScript 文件执行到 DLL

c - 在结构内部重新分配动态数组

c - C 中 Linux 上的内存模式扫描

c - 二指针表示困境