c++中指针与数组的区别:

数组只能在静态存储区被创建(全局数组),或在栈上创建(临时数组);
数组名对应一块内存,其地址和容量在生命周期内保持不变,只有内容可改变。
指针可以随时指向任意内存的内存块,特征是“可变”。

数组和指针修改内容时的不同:
char a[] = “hello”;
a[0] = ‘X’;//这个没问题。
这段语句表示:创建一个字符串并赋值为hello,修改字符串的第一个字符,没有问题。

char *p = “hello”;
p[0] = ‘X’;//这是个错误,有的编译器可能发现不了。
这段语句表示:用一个指针指向常量字符串“hello”,修改字符串的第一个字符时,在编译器中直接出现的常量字符串都会自带const,编译器在这个修改语法上不会发现有什么问题,但在运行时,就会因试图修改const常量而导致运行错误。

上面那种用法编译器会在初始化时就会报错:

数组和指针在内容复制和比较时的不同:

数组:
数组名无法直接进行比较,想要将数组a的值复制给数组b,使用b=a会产生编译错误,应该用标准库函数strcpy进行复制。
想要判断数组a和b的内容是否相同,使用if(a == b)会产生编译错误,应该使用标准库函数strcmp进行比较。

指针:
指针p = a不会将数组a复制到p,而是将a的首地址给p,指针复制需要申请一片大小与目的数组相等的内存,使用strcpy对指针名和数组名进行复制。
指针比较,使用strcmp比较两个指针名就可。

因此用字符串指针时,初始化不应该用p = "hello"这样的操作,而应该使用strcpy,或者for循环挨个赋值,或者其他赋值方法,而不应该用直接指向常量字符串的方法。

数组与指针内存容量上的不同:
数组的字节数sizeof()为其类型字节数和长度的乘积。
指针的字节数sizeof()为一个指针的字节数,即4。

c/c++语言无法获取到指针所指的内存容量,除非在申请内存的时候记住它。
当数组作为函数的参数进行传递时,数组将自动退化为同类型的指针,所以传入数组做参数时一般需要将其长度也作为参数传入,传入的数组想要查看其sizeof时值为4。

c++,数组与指针的差别相关推荐

  1. 引用和指针的差别,数组和指针的差别

    一:引用和指针的差别 1:引用并不是对象,它仅仅是为一个已存在的对象所起的另外一个名字.必须初始化,并且无法改变它绑定的对象,之后每次使用这个引用都是訪问最初绑定的那个对象. 2:指针本身是对象,能够 ...

  2. int转char数组_C语言学习第22篇---数组和指针的关系剖析

    数组的本质: 数组是一段连续的内存空间 数组的空间大小为sizeof(array_type)*array_size 数组名可以看做指向数组的第一个元素的常量指针(只是理解,其实是错的,参见<征服 ...

  3. 前言 数组与指针的艺术

    此文是笔者2005年所作<再再论指针>的修订版,与前文相比,本文主要的不同点有如下几点: 一.引用C/C++标准的条款去阐述原理.C与C++标准共有四个已发行的正式版本,分别是C89/C9 ...

  4. C++数组与指针的区别

    数组与指针的区别 前言 修改内容上的差别 运算符sizeof 可以计算出数组的容量(字节数) sizeof(p),p为指针得到的是一个指针变量的字节数,而不是p所指的内存容量 计算数组和指针的内存容量 ...

  5. 给linux内核传递数组,数组与指针 - Linux C编程实战之路_Linux编程_Linux公社-Linux系统门户网站...

    谈到C语言编程,数组和指针是很多人的心头大石,总觉得它们是重点难点,重点是没错的,但绝不是什么难点,要说C语言的难点,客观地讲应该是带参宏,而数组和指针,概念浅显易懂,操作简洁方便,根本不是很多初学者 ...

  6. C++ 数组与指针详解之终极无惑

    代码编译运行环境:VS2017+Debug+Win32 文章目录 1.数组 1.1数组名的意义 1.2数组的初始化 2.指针 2.1指针的定义 2.2定义指针的形式 2.3指针的初始化 2.4指针可以 ...

  7. C语言反汇编 - 多维数组与指针

    反汇编(Disassembly) 即把目标二进制机器码转为汇编代码的过程,该技术常用于软件破解.外挂技术.病毒分析.逆向工程.软件汉化等领域,学习和理解反汇编对软件调试.系统漏洞挖掘.内核原理及理解高 ...

  8. 深入理解指针数组、数组指针、函数指针、函数指针数组、指向函数指针数组的指针

    指针数组 表达式为:int *p[5] 理解:下标运算符[ ]的优先级是要高于指针运算符*,因此p先和下标运算符结合,决定了p首先是个数组,其类型int *,表明数组的元素都是都是指针.而数组占多少个 ...

  9. C语言基础之10:数组和指针

    Tips1: 关键字:static 运算符:&.*(一元) 如何创建并初始化数组 指针(在已学过的基础上). 指针和数组的关系 编写处理数组的函数 二维数组 Tips2: 人们通常借助计算机完 ...

最新文章

  1. 用GDB调试程序(五)
  2. maven生成war包的两种方式
  3. shell连接工具_无需本地软件,只用浏览器就能连接并控制安卓手机
  4. 建立Win32 Console Project时会出“error LNK1123” 错误
  5. webstorm环境安装配置(less+autoprefixer)
  6. spring.factories 的妙用
  7. 10分钟解决Redis安装和Springboot整合
  8. 贴张我家养的狗狗们的照片!
  9. 【翻译】PDF格式详解
  10. 那些创造外汇神话的交易员们
  11. 金融交易领域之外汇产品
  12. html snippets怎么配置,Import HTML snippets in HAML?
  13. linux系统学习(二)
  14. 仿购物商城-多级菜单搜索-搜索联动
  15. mysql前台启动linux,mysql 在linux下的启动
  16. CentOS编译安装Qt(Qt可使用静态编译编译器)
  17. linux 微信告警消息secret,Zabbix3.0.4微信告警配置详解
  18. 【RuoYi-Vue-Plus】学习笔记 41 - Easy Excel(一)Excel 2003(*.xls)导入流程分析(源码)
  19. 燃气管网监测系统助力天燃气管道安全运行
  20. layui数据表格接口_layui数据表格实现重载数据表格功能(搜索功能)

热门文章

  1. MATLAB图形标注
  2. 算法训练一(贪心、二分)(含解题思路)(上)
  3. python findall函数
  4. MATLAB 字符串数组
  5. CSDN是什么???
  6. DELL(i7版本)麦克风杂音问题解决方案
  7. 511遇见安卓手机投屏支持一键转无线群控
  8. 视频直播APP源码,通过css控制div内容展开更多/收起效果
  9. 华为手机忘了密码,怎样强制刷机呢?
  10. quill光标位置插入html,quill编辑器+word文档上传,插入指定位置