【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“的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升
- 2024-05-08代码报错不用愁,CodeGeeX一键完成代码修复、错误解释的功能上线了!
- 2024-05-08今天开始程序员不用再发愁写commit message了,全部由CodeGeeX自动完成!