调用指针函数 返回数组地址为什么报错大牛能解释一下吗

调用指针函数 返回数组地址为什么报错大牛能解释一下吗有点理解不了,

#include<stdio.h>

int* getdata(int num) {
    static int a[100];
    int k;
    
    if (num > 100)
        return;
    for ( k = 0; k < num; k++)
        scanf("%d",&a[k]);
    return a;

}

void main() {
    int j,*a;
    int num = 3;
    a=getdata(num);              //调用指针函数
    for (j = 0; j < num; j++)
        printf("%d", *(a + j));
}

img

if (num > 100)
    return;这个没有返回值 

a数组要改成全局变量

#include<stdio.h>

static int a[100];

int* getdata(int num) {
    int k;
    if (num > 100)
        return a;
    for ( k = 0; k < num; k++)
        scanf("%d",&a[k]);
    return a;
}
void main() {
    int j,*a;
    int num = 3;
    a=getdata(num);              //调用指针函数
    for (j = 0; j < num; j++)
        printf("%d", *(a + j));
}

getdata没有返回值啊

  1. 补上return后的返回值
  2. 在getdata函数的定义,函数返回类型那里有问题:应该是int getdata,而不是int getdata

指针函数里面第一个return后边加一个NULL试试,我用的cobeblocks编译的,return后边不加的话会报警,其他测试都正确

如果指针函数中定义的数组不加static的话,应该是定义在栈区的,子函数结束就释放了,此时return a没有作用(内存已经释放了),这样程序就会卡死,加上static后应该是定义在堆区的,可以正常执行