zoukankan      html  css  js  c++  java
  • 关于字符指针和字符数组初始化的问题

    int main()
    {
        char a[6]="hello";
        char b[6]="hello";
        char* c="hello";
        char* d="hello";
        //*(c+1)='!';出错
        if(a==b)
            cout<<"1"<<endl;
        if(c==d)
            cout<<"2"<<endl;
        return 0;
    }

    该题输出的是2.

    原因:a和b之所以不相等,因为他们的内存是在运行时栈上分布的,也就是说可以随机访问并且更改他们自己的数组空间。

    而c和d的初始化的空间分配,是在编译的时候就分配好了,"hello”放在了常量区,而栈上的c和d这两个字符指针,只是指向了这块固定的常量区,由于是放在常量区的,所以指针所指向的内容也就是不能修改的,但是修改指针的指向是可以的。如下:

    *(c+1)='!';//出错
    c="!";//指向了另外一块常量区内存
  • 相关阅读:
    C语言考点例题解析
    五笔打字
    常用快捷键
    网络基础知识
    人口增长
    8 封装
    9 绑定方法和非绑定方法
    6 抽象类
    7 多态和多态性
    5 组合
  • 原文地址:https://www.cnblogs.com/fightformylife/p/4072079.html
Copyright © 2011-2022 走看看