• 深入理解《字符指针与字符数组真正的区别》


    来自: http://blog.csdn.net/on_1y/article/details/13030439 (这篇介绍的非常到位和透彻!!!)

    char *p="hello";
    char q[]="hello";
    char *r = (char*)malloc(sizeof(char)*6);

    我们知道,字符指针和字符数组,都可以用来存储和表达字符串。

    但,它们的实现方式是不同的! 下面,从代码初始化的角度,来分别说明。

    (1)  char *p="hello";

    对于p本身,它是一个局部变量,位于 user stack 区域。

    p指向的 “hello” 是一个固定的,不可改变的常量,具有静态存储连续性数组类型,C++称它为“string literal”,位于.rodata 区域(位于该区域的数据是read-only)

    变量p中存储的是“hello”的首地址

    (2) char q[]="hello";

    对于q本身,位于 user stack 区域。

    q表示的是一个数组,存储的是一个固定不可改变的常量:为数组对应内存空间的首地址。也就是说q是一个指针常量

    数组对应的内存单元位于 user stack 区域,在初始化时,编译器计算出数组大小,然后将“hello”中的字符存储到数组中对应的单元。

    (3) char *r = (char*)malloc(sizeof(char)*6)

    对于r本身,位于 user stack 区域。

    r指向的内存单元,位于run-time heap中。 因为malloc、new等在运行时开辟的内存都位于heap中。

    具体位置如下图。

    并行 VS 并发

    未初始化和非法指针。

    指针和数组的问题。。。。*p cout is t, p=="tencent" is ok, 

  • 相关阅读:
    个人博客作业-软件案例分析1 博客园和CSDN
    第一次结对项目
    个人项目作业(1)
    个人博客作业(1)
    第一次个人作业
    面向对象第四单元总结和期末总结
    面向对象第三单元总结
    面向对象第二单元总结
    UML——BUAA_OO 第四单元总结 & 课程总结
    JML——BUAA_OO 第三单元总结
  • 原文地址:https://www.cnblogs.com/renrenbinbin/p/4444618.html
Copyright © 2020-2023  润新知