我一直在尝试传递我的数组地址以在主函数中打印数组值。但是它不起作用,因为它提示“按X.exe计数已停止工作”。它还显示一条警告消息,内容为“函数正在返回局部变量的地址”。我找不到问题。如果有人发现我的代码的指针相关问题,这将是有帮助的。
#include<stdio.h>
int * countBy(int x, int n)
{
int arr[n];
int count = x;
for(int i = 0; i < n; i++)
{
arr[i] = count;
count = count + x;
}
return arr;
}
int main()
{
int x = 2, n = 10;
int * prr;
prr = countBy(x, n);
for(int i = 0; i < 10; i++)
{
printf("%d ", prr[i]);
}
return 0;
}
答案 0 :(得分:2)
您不能在C语言中返回数组。您要么需要在主函数中创建数组并将其传递给函数,要么使用动态分配。
传递输出数组:
void countBy(int x, int n, int *arr)
{
int count = x;
for(int i = 0; i < n; i++) {
arr[i] = count;
count = count + x;
}
}
int main(void)
{
int x = 2, n = 10;
int arr[n];
countBy(x, n, arr);
}
动态分配:
int * countBy(int x, int n)
{
int *arr = malloc(n * sizeof(*arr));
int count = x;
for(int i = 0; i < n; i++) {
arr[i] = count;
count = count + x;
}
return arr;
}
int main(void)
{
int x = 2, n = 10;
int *prr;
prr = countBy(x, n);
free(prr); // Remember to use free to not cause memory leaks
}
答案 1 :(得分:1)
局部变量的生存期仅在定义它的块内部扩展。控件移出定义了局部变量的块之后,就不再分配变量的存储空间(不保证)。因此,在变量的生存期之外使用变量的内存地址将是不确定的行为。
另一方面,您可以执行以下操作,将int arr [n]替换为静态数组,但是必须声明该数组的大小。
...
static int arr[10];
...
这将解决问题,但如果用户输入所需的大小,则无法更改数组的大小。