C语言中指针型函数返回值相关的问题

指针型函数的返回值,应该是变量地址、数组首地址或者已经定向的指针变量,也可以是结构变量地址、结构数组的首地址。并且要着重注意的是不能将该函数内部局部变量的地址作为返回值,因为在函数调用结束之后,函数内部的局部变量就自动消失了,存放它们的空间也就被释放了。

之前在参考书中看到的一个例子,来说明这个问题正好:

#include <stdio.h>
char *strcut(char *s, int m, int n);
void main(){
    char s[] = "goodmorning";
    char *ps;
    ps = strcut(s, 3, 4);
    printf("%s\n", ps);
}
char *strcut(char *s, int m, int n){
    char substr[20];
    int i;
    for(i=0;i<n;i++){
        substr[i]=s[m+i-1];
    }
    substr[i]='\0';
    return substr;
}
运行上述程序时,会发现ps并不能接收到函数返回的子数组的正确地址,原因很简单,因为在函数定义中,substr是函数内部的变量,当函数执行完之后,该地址就释放了,最后return的当然就不是正确地址了。

而修改这个函数的方法也很简单,只需要将substr改为全局寿命的static类型就行。

static char strsub[20];

猜你喜欢

转载自blog.csdn.net/xhj_enen/article/details/79148550