gpt4 book ai didi

正确地从函数传递数组

转载 作者:行者123 更新时间:2023-11-30 15:16:29 25 4
gpt4 key购买 nike

我有一些代码可以在名为 array_generator 的函数中生成大小为 [user_input] 的数组,使用 main() 中 scanf 的数组大小,然后用数字 0 到 user_input (0, 1, 2, 3,如果用户输入是4)。当 printf 打印时,数组正确填充

`The array contains the value 1`
`The array contains the value 2`
`The array contains the value 3`, etc.

但是,当我将数组传递给 main 并 printf 数组值时,我得到充满垃圾数字的 equal 语句。我也 90% 确定我错误地传递了数组和指针(对它们来说是新的)。

代码如下:

#include <stdio.h>

int *array_generator(int number_songs);

int main(void)
{
int input;
int *p;
int i;
int x;

printf("Enter number of songs wanted in random playlist: ");
scanf("%d", &input);

p = array_generator(input);

x = *p;

for (i = 0; i < input; i++)
{
printf("The array contains the values %d\n", x);
}

return 0;
}

int *array_generator(int n)
{
int a[n];
int *p;
int i;

for (i = 0; i < n; i++)
{
a[i] = i;
printf("The array contains the values %d\n", i);
}

return p = &a[n];
}

最佳答案

一个简单的解决方案是定义一个比合理可能的最大歌曲列表更大的数组。比如,既然你把每条记录都打印出来,那么超过几百个就不合理了。现代计算机上的空间是丰富的。您可以在程序顶部或稍后在某些 header 中定义最大大小:

#define MAX_SONGLIST_LEN 1000

数组可以是全局的,也可以是函数内静态的。让我们将其设为静态,因为您希望函数返回地址。

变化很小。就说

static int a[MAX_SONGLIST_LEN];

您可能想要更改循环并检查最大长度:

for (i = 0; i < input && i < MAX_SONGLIST_LEN; i++)

array_generator()main()内。您可能还想告知用户最大捕获量以及太大的捕获量。 (无论如何,您都不会对用户输入进行任何错误处理 - 如果用户输入字母而不是数字会发生什么?查看 scanf() 的返回值。)

静态数组的生命周期就是程序的生命周期。顺便说一下,它将被初始化为全零。如果您想随机初始化它,请查看 rand() 函数。

关于正确地从函数传递数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33051869/

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