运行如下代码,输出时什么?
一、
char* GetString1()
{
char p[] = "Hello World";
return p;
}
char* GetString2()
{
char *p = "Hello World";
return p;
}
int _tmain(int argc, _TCHAR* argv[])
{
printf("GetString1 returns: %s. \n", GetString1());
printf("GetString2 returns: %s. \n", GetString2());
return 0;
}
原文解释:第一个函数返回的是数组的首地址,因为当函数GetString1函数返回时,数组内的空间被释放,所以打印的结果是随机的东西;而函数GetString2返回的是一个指针,指针指向的是一个常量字符串,全局变量对待,函数返回时空间不会被释放,所以函数返回的是Hello World
但是我用Visual studio 2010的编译器却输出这样结果:
这个问题待解决
二、
#include <stdio.h>
int main(void)
{
char str1[] = "hello world";
char str2[] = "hello world";
char *str3 = "hello world";
char *str4 = "hello world";
if(str1 == str2)
printf("str1 equal to str2\n");
else
printf("str1 not equal to str2\n");
if(str3 == str4)
printf("str3 equal to str4");
else
printf("str3 not equal to str4");
return 0;
}
str1和str2是两个字符串数组,编译器会为它们分配两个空间,并把字符串拷贝进去。str1和str2的值不同!所以不会相等。
str3和str4是两个指针,我们无需为它们分配内存以存储字符串的内容,而只需要把它们指向“hello world"在内存中的地址就可以了。由于”hello world"是字符串常量,所以在内存中只有一个拷贝,因为str3和str4指向的是同一个地址。
参考:http://zhedahht.blog.163.com/blog/static/254111742011299219769/