学到C语言函数时,突然萌生一种想法在子函数里面输入一个数组返回到main函数里面
刚开始代码是这样写的
#include"stdio.h"
char character(void);
int main(void)
{
char temp[20];
printf("Starting !\n");
printf("%s",character());
return 0;
}
/*
*定义一个返回值为char类型且无参数传入的子函数
*定义一个长度为20的数组用来存放字符串
*return返回数组的地址
*/
char character(void)
{
char s[20];
scanf("%s",&s);
return s;
}
刚开始觉得没问题,当编译后报错如下:
百度翻译
[Warning] return makes integer from pointer without a cast
[警告]return从指针生成整数,不带强制转换
[Warning] function returns address of local variable
[警告]函数返回局部变量的地址
运行直接GG
之后百度得知
**C语言返回值不支持返回数组,不过可以通过返回指针类型,用以替代数组。在C语言中,数组大多数时候是可以用指针替代的。**不过需要注意的是,不能够返回在函数内部定义的局部变量数组,因为一旦函数退出,局部变量就会被释放,导致数组指针无效。
可以返回以下几种:
- 全局变量,或者全局变量空间内的一个地址。
- 静态局部变量,或者静态局部变量内部的一个地址。
- 从参数传入的数组/指针变量,或者在其上做的合法偏移。
- 在数组内部动态申请的空间首地址。
百度知道地址
https://zhidao.baidu.com/question/489607384.html
#include"stdio.h"
char *character(char str[]);
int main(void)
{
char temp[20];
printf("Starting !\n");
printf("%s",character(temp));
return 0;
}
/*
*定义一个返回值为char类型的指针且传入主函数数组地址的子函数
*return返回char类型的指针(数组的地址)
*/
char *character(char str[])
{
scanf("%s",str);
return str;
}
将子函数改为返回char指针后,程序正常输出!