char *p1="china" 与char p2[]="china"的区别
来源:互联网 发布:计量经济学软件 编辑:程序博客网 时间:2024/05/22 13:05
<span style="font-size:18px;">#include<iostream>using namespace std;void fun(){char *p1 = "china";char p2[] = "china";*(p1 + 1) = 'A';*(p2 + 1) = 'A';}int main(){fun();return 0;}</span>VS2015下编译可以通过
运行时出现问题
把*(p1+1)这一行注释掉则正常输出h A
问题肯定出现在这一行,查看反汇编
p1中存储的是地址1358b30h 查看该地址处
p1存储的是字符串china的首地址 ,显然china存储在常量区中,只可读不可写
再看p2 先通过eax寄存器将china的前四个字节存在fun()函数的堆栈中,再通过cx寄存器将剩下的一个字节和0存入堆栈
小结:
1.char *p1="china";是将字符串china存储在内存中的常量区,再将首地址赋给p1,因此只可读不可写
2.char p2[]="china";是将常量区中的字符串复制到函数的堆栈中,并将首地址赋给p2,因此通过p2可以读写
1 0
- char *p1="china" 与char p2[]="china"的区别
- 【LVL1_5_c】【思考题】【7】char *p1="hellow world"和char p2[]="hellow world"的区别
- typedef char * pStr的问题,const char *p1 = string和const pStr p2 = string的区别
- char *p = new char; 和 char *p2 = "abcdef"的区别
- char* p3 = "1";和char* p1 = 1;区别
- char[] 与 char* 的区别
- char[] 与 char* 的区别
- char * 与 char[]的区别
- char *与char []的区别
- char *与 &char的区别
- char*与char[]的区别
- char[]与char*的区别
- char * 与char[]的区别
- char *与char[]的区别
- char[] 与char*的区别
- char[] 与char*的区别
- char * 与char []的区别
- *(char**) 与 (char*) 的区别
- Handler,looper,MessageQueue及 handlerThread 之间的关联和用法
- BulbleSort实现
- c fread fseek
- 第一周 Android开发环境搭建
- 欢迎使用CSDN-markdown编辑器
- char *p1="china" 与char p2[]="china"的区别
- sublime text3 中安装中文插件
- Codeforces Round #363 (Div. 2) B 暴力
- Yoshua Bengio等大神传授:26条深度学习经验
- OpenCV实现FloodFill泛洪填充算法的代码及相关函数详解
- LeetCode Sum of Two Integers
- 完全理解Android中的RemoteViews
- 在SQLserver中stuff 函数用法
- 【HDU】5468 Puzzled Elena