码迷,mamicode.com
首页 > 其他好文 > 详细

关于char*p与char p[]

时间:2016-09-11 14:12:50      阅读:167      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!