b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

char * p和char p []有什么区别?解决方案

电脑杂谈  发布时间:2020-04-20 03:11:28  来源:网络整理

char c语言怎么用_char c语言_c语言const char *

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”;

c语言const char *_char c语言怎么用_char c语言

------解决方案--------------------

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

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...