zoukankan      html  css  js  c++  java
  • 深入理解《字符指针与字符数组真正的区别》

    来自: 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, 

  • 相关阅读:
    如何通过npm编译Typescript代码
    TypeScript 中的':' 和'?:'的区别
    无法读取本地服务器JSON文件, 返回404错误
    Nodejs , npn 注册 包上传,更新,下载
    Java 字符流
    Java 字节流
    Java中的File类,递归是什么?
    JDBC工具类—如何封装JDBC
    JDBC的开发步骤
    vFor和vIf不要一起使用
  • 原文地址:https://www.cnblogs.com/renrenbinbin/p/4444618.html
Copyright © 2011-2022 走看看