运行如下结果 输出时什么?

来源:互联网 发布:宿城区网络问政 编辑:程序博客网 时间:2024/04/28 16:51

运行如下代码,输出时什么?

一、

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/

原创粉丝点击