【C++】char *p=“abc“ 与 char p[]=“abc“

2021/5/8 22:28:03

本文主要是介绍【C++】char *p=“abc“ 与 char p[]=“abc“,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

char p[] = “abc”;

char p[] = “abc”;把常量区的字符串值取出来放到寄存器,再由把寄存器中的值拷贝到栈内空间
p数组作为局部变量被存储在栈区
"abc"不是常量,编译器把这个语句解析为 char str[4] = {‘a’,‘b’,‘c’,’\0’}; 如果char p[] = “abc”;写在函数内部,那么这里的"abc\0"因为不是常量,所以应该被放在栈上

char *p = “abc”;

在这个声明中,"abc"被存储在静态数据区(全局).rodata, "abc"是常量
p是个指针,指向这个区域,p是被放在栈上的,并没有定义空间.
ptr[0] = ‘x’;能编译通过,但执行ptr[0] = ‘x’;就会发生运行时异常,因为这个语句试图去修改程序常量区中的东西。

在vs2019中编译不通过,要加const
char *是历史遗留问题,如果程序修改了字符变量变量会有可能导致程序的崩溃

char *p1 = "hello world!";
char *p2 = "hello world!";

char p3[] = "hello world!";
char p4[] = "hello world!";
printf("p1:%x\np2:%x",p1,p2);   p1p2指向同一块地址  p1=p2
printf("p3:%x\np4:%x",p3,p4);    p3!=p4


这篇关于【C++】char *p=“abc“ 与 char p[]=“abc“的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程