
char * p和char p []有什么区别? ?
C / C ++代码
#include <stdio.h>
#include <stdio.h>
void main()
{
char *p = "abcd"; //??程序在运行到 *(p+1) = 'a'; 时候出现内存读写错误。
char p[] = "abcd"; //换成这种写法,程序可以正常运行。
printf("*(p+1) = %c\n", *(p+1));
*(p+1) = 'a';
printf("*(p+1) = %c\n", *(p+1));
return;
}
//等待高手解答疑问????谢谢
------解决方案--------------------
char * p =“ abcd”;写错了
正确的是
const char * p =“ abcd”;

------解决方案--------------------
char * p =“ abcd”;
p指向只读数据区,无法修改
所以*(p + 1)='a';是非法操作
以上参数的前提是程序正在保护模式下运行. 如果在实模式下,程序仍然可以运行
房东可以学习可变存储空间的分类!
------解决方案--------------------
“ abcd”是一个常量
------解决方案--------------------
这是另一个问题. 实用的英特尔编译器没有此问题.
------解决方案--------------------
char p [] =“ abcd”;是堆栈上可以修改的变量.
------解决方案--------------------
p指向只读数据区域,这句话的依据是什么?
============================================= <
尽管标准中对此进行了说明char c语言,但并非所有编译器都是这样.
我在上面告诉您,英特尔编译器允许您更改此字符串.
但是,如果您想编写可被其他编译器传递的代码,请不要这样做.
------解决方案--------------------
“ abcd”是一个字符常量,p指向它char c语言,当然它指向只读数据区!
对于char p [] =“ abcd”; p是在堆栈上开发的数组,“ abcd”存储在此数组中,因此它不是只读的!
------解决方案--------------------
讨论
p指向只读数据区域,这句话的依据是什么?
============================================= <
尽管标准中对此进行了说明,但并非所有编译器都是这样.
我在上面告诉您,英特尔编译器允许您更改此字符串.
但是,如果您想编写可被其他编译器传递的代码,请不要这样做.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-181911-1.html
9