gpt4 book ai didi

c - 如何将数组传递给这样的函数 : void fooboo(char array[i]);

转载 作者:行者123 更新时间:2023-12-04 19:59:41 24 4
gpt4 key购买 nike

我试图准确理解这段代码试图完成的任务。给出了函数 median,但我添加了 main 函数和 typedef/prototypes 以通过将某些东西传递给函数来努力理解它的作用。但是我可以弄清楚将什么或如何传递给它。我知道这个功能是某种类型的。我真正需要知道的是传递给函数的究竟是什么? N个索引的数组?

感谢您的指导!

#include <stdio.h>
#include <stdlib.h>

typedef unsigned char pix_t;
pix_t median(pix_t window[N]);

int main() {

pix_t window[] = { 4, 3, 2, 1 };
pix_t output;
output = median(window[N]);

}

pix_t median(pix_t window[N])
{
pix_t t[N], z[N];
int ii, k, stage;

// copy locally
for (ii = 0; ii<N; ii++) z[ii] = window[ii];

for (stage = 1; stage <= N; stage++) {
k = (stage % 2 == 1) ? 0 : 1;
for (ii = k; ii<N - 1; ii++) {
t[ii] = MIN(z[ii], z[ii + 1]);
t[ii + 1] = MAX(z[ii], z[ii + 1]);
z[ii] = t[ii];
z[ii + 1] = t[ii + 1];
}
}

return z[N / 2];
}

最佳答案

给定函数签名

pix_t median(pix_t window[N])

像这样的电话

median(window[N]);

错了。该函数需要一个包含至少 N 个元素的 pix_t 数组注意,而您只传递了一个pix_t 类型的单个变量。

故事的寓意::每当感到困惑时,请检查数据类型

这个函数应该用一个数组来调用,比如

#define N 10                                    //any number

int main(void) { //note the change

pix_t window[N] = { 4, 3, 2, 1 };
pix_t output;
output = median(window); //passing the array
}

应该做。


注意点:尽管函数签名中使用了数组表示法

 pix_t median(pix_t window[N]) { //....

在函数内部,window 不是数组。引用 C11,章节 §6.7.6.3

A declaration of a parameter as ‘‘array of type’’ shall be adjusted to ‘‘qualified pointer to type’’, where the type qualifiers (if any) are those specified within the [ and ] of the array type derivation. [....]


注意:

What I really need to know is what is exactly being passed to the function? An array of N index?

“至少N个元素”的意思是指保证数组有足够的存储空间来容纳N个元素直到位置N-1,而不是索引 NN+1N+2... 是有效的/可寻址的。

你可以把它理解为:“我保证至少有 N 个单元格的存储空间,这样我就可以存储在最多 N 个元素在 N-1 个有效位置。”

但是,程序员有责任手动跟踪这些细节以避免索引到无效位置并导致段错误;环境不会自动为您执行此操作。

关于c - 如何将数组传递给这样的函数 : void fooboo(char array[i]);,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43534273/

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