zoukankan      html  css  js  c++  java
  • C++ 中 字符数组 和 指针 区别

    char str1[] = "abc"; 
    char str2[] = "abc";

    const char str3[] = "abc"; const char str4[] = "abc"; const char* str5 = "abc"; // 指向 "abc" 首地址
    const char* str6 = "abc"; // 指向 "abc" 首地址 
    cout
    << (str1 == str2) << endl; //true or false
    cout << (str3 == str4) << endl; cout << (str5 == str6) << endl;
    1. “char str1[] = "abc";”的含义是定义一个char型数组str1,初始化为abc。
    2. "abc"是一个常量,应该保存在常量存储区。那么是不是str1就等于"abc"的地址呢?当然不是!str1是一个变量,保存在栈中,这句话的意思是在栈中申请大小为4的空间,保存"abc"(包括)。同理,“char str2[] = "abc";”也是在栈中申请了额外的空间保存"abc",也就是说,现在有3个"abc"字符串,分别保存在栈中和常量存储区。那么我们应该清楚了,str1不等于str2。
    3. 对于“const char str3[] = "abc";”,大家千万别被const欺骗了。我们知道,使用const定义的变量一般是不分配内存的,而是保存在符号表中。但是对于const数组来讲,系统不确定符号表是否有足够的空间来存放const数组,所以还是为const数组分配内存的。所以str3指向的是栈上的"abc"。同理“const char str4[] = "abc";”也是一样。所以str3和str4不相同。
    4. 对于 “const char* str5 = "abc";”,str5是一个指针,保存在符号表上,指向的是常量存储区中的"abc"。“const char* str5 = "abc";”中str6也是指向常量存储区中的"abc",所以str5等于str6。

    如欲想完全弄明白其中含义,我建议大家 去学习一下 汇编基础知识,方可知道 C / C++ 等高级语言 的内存,指针  与 寄存器的之间关系

      其实指针就是保存了 指向内存的地址 而已, 在汇编中 一般就是 用一个寄存器 去保存要访问内存的地址,然后在CPU执行的时候,让其 IP 命令执行地址寄存器 指向到那个地址,

    然后以执行命令的方式进行向后执行。

  • 相关阅读:
    使用Docker Swarm搭建分布式爬虫集群
    如果你不知道做什么,那就学一门杂学吧
    正则表达式re.sub替换不完整的问题现象及其根本原因
    Visual Studio 2019 正式版今日发布 key
    net core 记录自定义端口多个方式
    HTTP Error 500.0
    来自后端的逆袭 blazor简介 全栈的福音
    创建一个RAS 非对称 公私密钥示例
    树莓派安装window ioT
    WPF USB设备采集开源工具介绍
  • 原文地址:https://www.cnblogs.com/Kernel001/p/8259398.html
Copyright © 2011-2022 走看看