gpt4 book ai didi

c - 将数组传递给函数!困惑!在C语言编程中

转载 作者:行者123 更新时间:2023-11-30 21:24:01 25 4
gpt4 key购买 nike

数组示例:

int hourlyTemperatures[ 24 ];

所以在函数调用中我们写入数组名称及其大小!

modifyArray( hourlyTemperatures, 24 )

我们知道上面提到的是将数组传递给函数的正确方法!

但在下面的代码中,我看到我们正在调用mean函数并传递数组,但没有给出其元素大小,如mean(response);

所以我的问题是哪一个是正确的?传递数组及其元素大小还是仅传递数组及其名称?以及为什么使用这两种方法?

#include<stdio.h>
#define SIZE 99

void mean(const unsigned int answer[]);

int main(void)
{
unsigned int response [SIZE] =
{6,7,8,9,8,7,8,9,8,9,7,8,9,5,9,8,7,8,7,8,6,7,8,9,3,9,
8,7,8,7,7,8,9,8,9,8,9,7,8,9,6,7,8,7,8,7,9,8,9,2,7,8,
9,8,9,8,9,7,5,3,5,6,7,2,5,3,9,4,6,4,7,8,9,6,8,7,8,9,
7,8,7,4,4,2,5,3,8,7,5,6,4,5,6,1,6,5,7,8,7
};

mean (response);
}

void mean (const unsigned int answer[])
{
size_t j;
unsigned int total = 0;

printf("%s\n%s\n%s\n", "********", "Mean", "********");

// total response values
for(j=0; j<SIZE; ++j){
total += answer[j];
}

printf ("The mean is the average value of the data items!\n"
"The mean is the equal to the total of all data items\n"
"divided by the number of data items (%u)\n\n", SIZE);

printf("The mean value for this run is: %u / %u = %.4f\n\n", total, SIZE, (double)total/SIZE );

}

最佳答案

函数调用 modifyArray(hourlyTemperatures, 24) 将指针传递给数组 hourlyTemperatures[] 中存储的第一个 int,因此函数知道在哪里找到第一个值和 int 24,因此该函数知道数组有多大,以避免超出数组末尾。

函数调用 mean(response) 传递一个指向数组 response[] 中存储的第一个 unsigned int 的指针,但是该函数需要另一种方法来知道数组有多大,因为调用者没有传递更多信息。

编译程序时使用预处理器指令#define SIZE 99,并且在实际编译之前,源代码中出现的任何字符“SIZE”都会被替换为字符“99”,所以该函数用以下行解释:

for (j = 0; j < 99; ++j) {...

通过这种方式,mean()函数就知道数组有多大。除了使用 #define 之外,您还可以添加以下行:

int size = 99;

在函数定义之前。这将使 size 成为一个全局变量,在其下面的任何函数中都可见,因此您可以编写:

for (j = 0; j < size; ++j) {...

但是,由于全局变量通常是一件坏事,因此您通常应该选择第一种方法,将数组的大小显式传递给处理数组的函数。

所以,回顾一下:

1) 通常最好将数组的大小显式传递给处理函数:modifyArray(hourlyTemperatures, 24)。这样,您始终知道数组的大小,并且可以使用不同大小的数组:modifyArray(hourlyTemperatures, 25),例如,如果您添加了温度测量。

2) 您可以定义一个常量来存储数组的大小,然后在数组处理函数中使用该常量:#define SIZE 99。这样做的一个缺点是,如果您想要使用包含 100 个元素的数组,则必须更改源代码,以便 #define SIZE 100,然后重新编译。

3) 可以声明一个全局变量来存储数组的大小,并在数组处理函数中使用该全局变量。源文件中声明下方的任何函数都可以访问全局变量。此方法很容易出错:另一个函数可能会无意中更改 size 的值,从而在您调用 mean() 时给您带来令人讨厌的意外。

最后一件事——字符串是一个 char 数组,但不仅仅是任何旧的 char 数组:它必须以 null 结尾。这意味着字符串的最后一个字符必须是“\0”。处理字符串的函数不需要知道字符串的大小(即使字符串是数组),因为该信息隐含在字符串中。您可以计算“\0”之前的字符数(或仅使用 strlen()),或者仅按顺序处理字符直到到达末尾。

关于c - 将数组传递给函数!困惑!在C语言编程中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39760219/

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