(C/C++)区别:数组与指针,指针与引用

本文详细介绍了C/C++中数组、指针和引用的区别。数组在静态存储区或栈上创建,地址和容量不变,而指针更灵活但有风险。数组与指针在初始化、内容复制和比较、内存容量计算等方面有不同操作。引用则是变量的别名,一旦初始化不可变。此外,还讨论了指针数组、数组指针、函数指针和指针函数的概念。在函数参数传递中,引用传递会直接影响主调函数中的变量,而指针传递则可能需要二级指针来实现类似效果。
摘要由CSDN通过智能技术生成

1.数组跟指针的区别

数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。

指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。指针远比数组灵活,但也更危险。

数组和指针特点的简单比较:

数组 指针
保存数据 保存地址
直接访问数据 间接访问数据,先取得指针的内容,然后以它为地址取得数据
用于存储数目固定且类型相同的数据 通常用于动态数据结构
编译器自动分配和删除 动态的分配和删除
自身即为数据名 通常指向隐式数据
(1)指针和数组都可以在初始化的时候赋予字符串常量。尽管看上去一样,底层机制却不同。

指针在定义的时候,编译器并不会为指针所指向的对象分配内存空间,它只是分配指针变量的空间。除非以一个字符串常量对其进行初始化。下面的定义创建了一个字符串常量(为其分配了内存空间) char *p = “abcd”;

在ANSI C中,初始化指针时所指向的字符串被定义为只读,如果想通过指针修改字符串的时候,会产生未定义的行为。 数组也可以用字符串常量进行初始化,但是其内容可以被修改。

(2)内容的复制和比较不能对数组进行字节复制和比较,对于两个数组a,b,不能用b=a进行复制,而应当使用标准库函数strcpy()。也不能使用if(b==a)进行比较,应当使用strcmp()。 而对于指针p,如果要想将数组a中的内容复制,要先申请一块内存区域,然后使用strcpy()进行拷贝。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值