gpt4 book ai didi

c - 从函数返回指针而不将变量定义为静态?

转载 作者:太空宇宙 更新时间:2023-11-04 03:27:02 27 4
gpt4 key购买 nike

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

int* func();
int main(void) {

int *b = NULL,i;
b = func();
for(i=0;i<7;i++)
{
printf("%d\n",*b);
b++;
}
}

int * func()
{
int *p;
p = malloc(sizeof(int) * 7);
int arr[]={1,2,3,4,5,6,7}; //without using static
p = arr;
return p;
}

如何将数组的地址返回给打印值的主函数??如果我们在堆中为数组分配内存而不将数组声明为静态数组,那么我们能否将数组作为指针传递给函数??

最佳答案

你很接近,但还不完全。

以下表达导致 p 指向 arr 的地址这不是预期的效果:

p = arr;

请记住,p 是一个指针,如果您不使用取消引用运算符 *,那么您指的是指针的地址,而不是它的。 arr 的内存在函数退出时被释放,分配给 p 的内存丢失 因为您将 p 的地址重新分配给了指向本地变量arr的地址

解决方案是使用 for 循环将 arr 的 复制到 p:

int i = 0;
for (; i < 7; ++i) {
p[i] = arr[i];
}

这将打印所需的结果,因为您替换了 p 指向,而不是 p 本身的地址。 p>

关于c - 从函数返回指针而不将变量定义为静态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40333163/

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