首页 > 其他 > 详细

关于char*p与char p[]

时间:2016-09-11 14:12:39      阅读:210      评论:0      收藏:0      [点我收藏+]

在华为的试题中看到的一个小题目

类似这样:

#include "stdio.h"
char *get_string_1()
{
    char p[] = "hello world!";
    return p;
}
char *get_string_2()
{
    char *p = "hello world!";
    return p;
}
int main()
{
    char *p;
    p = get_string_1();
    printf("get_string_1:%s\n",p);
    p = get_string_2();
    printf("get_string_2:%s\n",p);
    return 0;
}

主要是关于char*p与char p[]的区别

1.首先"hello world"是一个字符串常量,存放在静态数据区,是全局的,只读的。

2.函数1是将一个字符串常量赋值给一个数组p(局部变量),该局部变量p存放在栈中,就是说"hello world"在栈中有了一份拷贝,但函数结束时局部变量p的内存要被清空。

3.函数2中的的指针是直接指向静态数据区的"hello world",此指针指向的内存在程序中不会被清空。

4.char *p = "hello world"这样写并不好,最好为const char*p="hello world"。

附:  char *p1 = "hello world!"; 
           char *p2 = "hello world!"; 
           cout<<p1<<p2<<endl;

结果是一样的。

            

                 

 

关于char*p与char p[]

原文:http://www.cnblogs.com/zymcpp/p/5861547.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!