c++,数组与指针的差别
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:引用并不是对象,它仅仅是为一个已存在的对象所起的另外一个名字.必须初始化,并且无法改变它绑定的对象,之后每次使用这个引用都是訪问最初绑定的那个对象. 2:指针本身是对象,能够 ...
- int转char数组_C语言学习第22篇---数组和指针的关系剖析
数组的本质: 数组是一段连续的内存空间 数组的空间大小为sizeof(array_type)*array_size 数组名可以看做指向数组的第一个元素的常量指针(只是理解,其实是错的,参见<征服 ...
- 前言 数组与指针的艺术
此文是笔者2005年所作<再再论指针>的修订版,与前文相比,本文主要的不同点有如下几点: 一.引用C/C++标准的条款去阐述原理.C与C++标准共有四个已发行的正式版本,分别是C89/C9 ...
- C++数组与指针的区别
数组与指针的区别 前言 修改内容上的差别 运算符sizeof 可以计算出数组的容量(字节数) sizeof(p),p为指针得到的是一个指针变量的字节数,而不是p所指的内存容量 计算数组和指针的内存容量 ...
- 给linux内核传递数组,数组与指针 - Linux C编程实战之路_Linux编程_Linux公社-Linux系统门户网站...
谈到C语言编程,数组和指针是很多人的心头大石,总觉得它们是重点难点,重点是没错的,但绝不是什么难点,要说C语言的难点,客观地讲应该是带参宏,而数组和指针,概念浅显易懂,操作简洁方便,根本不是很多初学者 ...
- C++ 数组与指针详解之终极无惑
代码编译运行环境:VS2017+Debug+Win32 文章目录 1.数组 1.1数组名的意义 1.2数组的初始化 2.指针 2.1指针的定义 2.2定义指针的形式 2.3指针的初始化 2.4指针可以 ...
- C语言反汇编 - 多维数组与指针
反汇编(Disassembly) 即把目标二进制机器码转为汇编代码的过程,该技术常用于软件破解.外挂技术.病毒分析.逆向工程.软件汉化等领域,学习和理解反汇编对软件调试.系统漏洞挖掘.内核原理及理解高 ...
- 深入理解指针数组、数组指针、函数指针、函数指针数组、指向函数指针数组的指针
指针数组 表达式为:int *p[5] 理解:下标运算符[ ]的优先级是要高于指针运算符*,因此p先和下标运算符结合,决定了p首先是个数组,其类型int *,表明数组的元素都是都是指针.而数组占多少个 ...
- C语言基础之10:数组和指针
Tips1: 关键字:static 运算符:&.*(一元) 如何创建并初始化数组 指针(在已学过的基础上). 指针和数组的关系 编写处理数组的函数 二维数组 Tips2: 人们通常借助计算机完 ...
最新文章
- 用GDB调试程序(五)
- maven生成war包的两种方式
- shell连接工具_无需本地软件,只用浏览器就能连接并控制安卓手机
- 建立Win32 Console Project时会出“error LNK1123” 错误
- webstorm环境安装配置(less+autoprefixer)
- spring.factories 的妙用
- 10分钟解决Redis安装和Springboot整合
- 贴张我家养的狗狗们的照片!
- 【翻译】PDF格式详解
- 那些创造外汇神话的交易员们
- 金融交易领域之外汇产品
- html snippets怎么配置,Import HTML snippets in HAML?
- linux系统学习(二)
- 仿购物商城-多级菜单搜索-搜索联动
- mysql前台启动linux,mysql 在linux下的启动
- CentOS编译安装Qt(Qt可使用静态编译编译器)
- linux 微信告警消息secret,Zabbix3.0.4微信告警配置详解
- 【RuoYi-Vue-Plus】学习笔记 41 - Easy Excel(一)Excel 2003(*.xls)导入流程分析(源码)
- 燃气管网监测系统助力天燃气管道安全运行
- layui数据表格接口_layui数据表格实现重载数据表格功能(搜索功能)