关于指针的有关问题,请指教
关于指针的问题,请大虾指教!
我定义了两个函数:
char * f1()
{
char a[]= "hello1 ";
return a;
}
char * f2()
{
char *s= "hello2 ";
return s;
}
int main()
{
char *s1;
char *s2;
s2=f1();
s2=f2();
printf(s2);
printf(s2);
return 0;
}
对于第一个函数,编译器会提示错误,我也明白他错在哪里了,我想问的是第二个函数,他怎么可以正常的打印出字符串呢,char* s 不是创建在栈上吗,函数结束后不就成野指针了吗,为什么可以正常打印出来呢?
------解决方案--------------------
第二个函数, s是一个指针, 没有分配内存空间的, 也就无所谓栈上不栈上了, 哪里都不是, 因为根本就没有分配
这个指针指向的是常量区的字符串 "hello2 ", 这个字符串在整个程序的运行时期都存在, 所以可以正确显示
这两个函数的区别是: 第一个在栈中分配了内存, 并将这个内存中的数据初始化为 "hello1 "
第二个根本没有分配内存
我定义了两个函数:
char * f1()
{
char a[]= "hello1 ";
return a;
}
char * f2()
{
char *s= "hello2 ";
return s;
}
int main()
{
char *s1;
char *s2;
s2=f1();
s2=f2();
printf(s2);
printf(s2);
return 0;
}
对于第一个函数,编译器会提示错误,我也明白他错在哪里了,我想问的是第二个函数,他怎么可以正常的打印出字符串呢,char* s 不是创建在栈上吗,函数结束后不就成野指针了吗,为什么可以正常打印出来呢?
------解决方案--------------------
第二个函数, s是一个指针, 没有分配内存空间的, 也就无所谓栈上不栈上了, 哪里都不是, 因为根本就没有分配
这个指针指向的是常量区的字符串 "hello2 ", 这个字符串在整个程序的运行时期都存在, 所以可以正确显示
这两个函数的区别是: 第一个在栈中分配了内存, 并将这个内存中的数据初始化为 "hello1 "
第二个根本没有分配内存