关于char*p与char p[]

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

类似这样:

#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;

结果是一样的。

            

                 

 

posted @ 2016-09-11 13:04  zym233  阅读(1001)  评论(0编辑  收藏  举报