gpt4 book ai didi

C 在函数中返回数组

转载 作者:行者123 更新时间:2023-12-04 05:01:03 25 4
gpt4 key购买 nike

我对 C 比较了解,我习惯用 Java 编程,所以我发现 C 在涉及数组的方面有点困难。我仍然对这些案例感到困惑:

int a [];
int* a;
int *a;

在java中,我会做这样的事情来在函数中返回一个数组:
int [] returnArr(int [] a){
... modify a ...
return a;
}

int [] a = {...};
int [] b = returnArr(a); ##

我如何在 C 中做同样的事情,特别是带有 ## 的部分。

编辑:
我有这个功能:
float *normalizeValues(float *v, float maxY){

int size = sizeof(v) / sizeof(float);
float max = findMax(v);
float ratio = maxY / max;
int i;
for(i = 0; i < size ; ++i){
v[i] = v[i] * ratio;
}
return v;
}

我在做以下事情:
float vert [] = {306, 319, 360, 357, 375, 374, 387, 391, 391, 70, 82, 94, 91, 108, 114, 125, 127, 131};
int i = 0;
float *vert2;
vert2 = normalizeValues(vert, 0.7);

for(i = 0; i < sizeof(vert2) / sizeof(float); ++i){
fprintf(stdout,": %f\n",vert2[i]);
}

并且输出只有 1 个元素。

最佳答案

编辑:要直接回答您更新的问题:您必须传入数组的大小。 C 没有像 Java 那样存储数组大小的机制。如果编译器知道数组的大小,因为数组是全局或局部变量,不是动态分配的,那么您可以使用 sizeof() 运算符。否则,您必须单独知道大小,或者在数组中使用标记值(例如末尾的 0.0 或 NULL)。

至于一般的数组、指针和参数,请参见下文:

您将返回一个指向数组的指针,该指针用 '*' 语法表示:

int *returnArr(int[] a) {
// modify a...
return a;
}

int a[] = { ... };
int *b;
b = returnArr(a);

需要注意的几点:
  • 您不能在涉及非常量表达式(例如,函数调用)的变量声明中进行赋值。不过,这可能在 C99 中发生了变化。
  • 括号在变量名之后,不像在 Java 中它们是类型的一部分。尽管 Java 的语法更加一致,但在 C 中并不完全有意义,因为您经常在变量声明的括号中给出数组大小:
    int a[3] = { ... };
  • 没有办法指定一个函数返回一个数组而不是一个普通的指针。在 C 中,数组引用衰减为指针(尽管通常声称指针和数组不是一回事)。这意味着每当你传递一个数组时,C 只提供一种方法来传递一个指向数组的指针。整个数组实际上并没有被复制。碰巧的是,数组的名称也是指向数组第一个元素的指针。

  • 还请注意 user268396 在他们的回答中所说的内容。如果您打算创建一个新数组并返回它,则需要动态分配该数组,或者传入一个指向已分配数组的指针(这似乎是您正在做的事情) .

    关于C 在函数中返回数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16139101/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com