为什么两个数组不能直接赋值?const详解

本文探讨了在C语言中,为什么两个数组不能直接赋值。原因是数组名实际上是一个指向首元素的常量指针,不能改变。通过示例展示了数组地址和指针地址的区别,解释了取数组地址实际上是获取整个数组的起始位置,而指针加减则是按单个元素的大小移动。
摘要由CSDN通过智能技术生成

指针 关于const

关于const

数组变量 是 const 的指针

在初学数组时,我们都有这样的思考:既然变量可以互相赋值,那么 数组 可以相互赋值吗?
比如说:

int a = 1;
int b = 2;
int arr1[3] = {1, 2, 3};
int arr2[3] = {0};
b = a;//ok
arr2 = arr1;//error

一但这么些程序就会报错,为什么会这样呢?

这是因为,以上面的为例:int arr2[3] = {0}在编译器看来其实是这样的:int* const arr2 上一篇我们也学到了,const在 * 后 const 修饰的是地址 arr2,因此arr2是不能被改变的

int* const arrint arr[]是否可以划等号?

我们先来看下面这个程序:

int main() {

	int arr[3] = { 1, 2, 3 };
	int* const q = arr;
	
	printf("arr  = %p\n", arr);
	printf("&arr = %p\n", &arr);
	
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值