① 函数的返回类型不能为一个数组类型。
这个就是说,作为函数返回类型的不能为一个数组,我们要想返回一系列的值,只能用一个指针来代替了,返回指向这一系列值的第一个元素的指针。
② 局部数组,具有局部作用域,当函数调用结束之后,数组也就被操作系统销毁了,即回收了他的内存空间,它里面的东西随时都有可能被覆盖。虽然此时我们获得了指向这一块内存的指针,但此刻里面的东西很大可能都不是我们想要的了。
我们又该怎么解决这个问题呢?
1: 返回一个静态的数组
即我们在定义数组的时候吧数组定义成为静态的。
如:
char *fun()
{
static char a[] = "hello,world";
return a;
}
2: 动态分配内存
如:
char *fun()
{
char *a = (char*)malloc(sizeof(char)*100);
a = "hello,world";
return a;
}
3: 使用全局数组
全局数组具有全局的作用域。
字符串:
我们在函数或者全局内定义的char *p = “Hello World!”;编译器都会为我们作为全局变量定义。伪代码如下
const char temp[] = “Hello World!”;
char *p1 = temp;
任何调用“Hello World!”只是返回temp的一个const指针。
函数内:
Char * fun2()
{
char *p = “Hello world!”
return p;
}
全局变量
char *p = “Hello world!”
威盛的一道笔试题
silver6 | 02 十一月, 2005 09:20
#include <stdio.h>
char *returnStr()
{
char p[]="hello world!";
return p;
}
int main()
{
char *str;
str=returnStr();
printf("%sn",str);
}
问上述的输出是什么?
还有就是我把上述函数稍改一下
#include <stdio.h>
char *returnStr()
{
char *p="hello world!";
return p;
}
int main()
{
char *str;
str=returnStr();
printf("%sn",str);
}
这个输出又是什么?各是什么原因呢
char p[]="hello world!";
p指向一个局部的数组地址,分配在栈中。
char *p="hello world!";
p指向一个字面常量。字面常量分配在静态存储区。所以:
第一个指向的是个已被释放的内存,不会输出hello world!,要出错的吧
第二个输出的是: hello world!