1. 数组作为函数形参,在函数内部进行数值拷贝。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void func(char *p)
{
char str[10] = {"hello"};
strcpy(p,str);
}
int main()
{
char p[10] = {0};
func(p);
printf("main p=%s\n",p);
}
main p=hello
说明:
1. 数组名作为形参传递到函数func中,我们知道,数组名是一个指针,代表数组的首地址。
2. 在函数内部,使用库函数strcpy,将字符数组str的值拷贝到形参数组p中,这是一个值拷贝的动作。所以,数组p的地址上,就顺利获得了数组str的内容。并且成功携带回了main函数中。
3. 函数func结束,局部变量str销毁,但是,形参p却不会。因为它是main函数的局部变量,要等main函数结束才会销毁。
2. 使用static关键字
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* func()
{
static char str[10] = {"hello"};
return str;
}
int main()
{
char* p = NULL;
p = func();
printf("main p=%s\n",p);
}
main p=hello
说明:
1. 在函数func中,将局部变量str使用static进行修饰,使其变为一个全局变量。正是由于str有了static修饰,所以,在函数func执行结束,变量str并不会被销毁。
2. 在函数func中,可以直接将str作为函数返回值进行返回。
3. 定义一个全局变量
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
static char p[10] = {0};
void func()
{
char str[10] = {"hello"};
strcpy(p,str);
}
int main()
{
func();
printf("main p=%s\n",p);
}
main p=hello
说明:
1. 在main函数外围定义一个全局变量。
2. 调用函数func,并且在函数fun中进行值拷贝。
3. 函数指指针作为形参传递,在函数内部进行值拷贝。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void func(char *p)
{
char str[10] = {"hello"};
strcpy(p,str);
}
int main()
{
char *p=(char *)malloc(sizeof(char)*10);
func(p);
printf("main p=%s\n",p);
free(p);
}
main p=hello
说明:
1. 此种做法与第一种做法类似,但是此处传递的是一个已经申请了内存的字符指针而已。
2. 注意,动态申请的内存一定要记得释放!
总结:
目前我常用的就是以上的三种,这里仅提供一种思路,大家灵活使用哈。另外欢迎大家在评论区进行补充。