子函数定义的变量能否返回主函数

#include<stdio.h>
int main()
{
int group[10]={1,2,4,2,5,1,5,3,4,3};
int upside(int g[],int n);
int *pointer;
int i;
pointer=upside(group,10);
for(i=0;i<10;i++)
printf("%d",*pointer++);
}
int upside(int *g,int n);
{
int i;
int lp[10];
for(i=0;i<n-1-i;i++)
{
lp[i]=g[n-1+i];
}
return(lp);#include<stdio.h>
int main()
{
int group[10]={1,2,4,2,5,1,5,3,4,3};
int upside(int g[],int n);
int *pointer;
int i;
pointer=upside(group,10);
for(i=0;i<10;i++)
printf("%d",*pointer++);
}
int upside(int g,int n);
{
int i;
int lp[10];
for(i=0;i<n-1-i;i++)
{
lp[i]=g[n-1+i];
}
return(lp);
}
[Error] C:\Users\T460s\Documents\C-Free\Temp\未命名1.cpp:8: error: invalid conversion from int' toint
'

子函数中局部变量创建的数组或对象是保存在内存的栈区,函数执行结束会被回收,
要把lp传递到函数之外,需要改用指针。并用malloc强制分配空间(malloc分配的空间保存在内存的堆区,函数执行结束不会被回收)

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int group[10] = {1, 2, 4, 2, 5, 1, 5, 3, 4, 3};
    int* upside(int g[], int n); //返回指针int*类型
    int *pointer;
    int i;
    pointer = upside(group, 10);
    for (i = 0; i < 10; i++)
        printf("%d ", *pointer++);
}
//int upside(int *g, int n);
int* upside(int *g, int n) //返回指针int*类型,  最后的;号去掉
{
    int i;
    // int lp[10];
    int *lp = (int *)malloc(sizeof(int)*10); //lp改为指针。并用malloc强制分配空间
    for (i = 0; i < n; i++)    // 是i < n 
    {
        lp[i] = g[n - 1 - i]; // 是n - 1 - i  不是n - 1 + i
    }
    return (lp);
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

正常是可以的void代表无返回,int代表返回一个整型,子函数的声明应该在main函数前面

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632