在华为的试题中看到的一个小题目
类似这样:
#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;
结果是一样的。
时间: 2024-10-10 06:42:37