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

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

一、

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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值