C语言,指针的一些运算

若创建一个数组:int arr[10] = 0;

用指针变量来储存数组首元素的地址:int* p = arr,这里arr是数组名,表示首元素地址。

若p = p + 1或者p++之后p本来指向数组首元素地址,就变成了指向第二个元素的地址,p + n即指向第n + 1个地址。

减法也是同理,还可以用指针的方式来相减,即指针减指针,第3个元素的地址减去第一个元素的地址就为2,以此类推。

语法规定,数组指针的比较可以向后越界比较,但是不能向前比较。

既然数组名代表首元素地址,为什么不能直接用数组名来加减呢

因为数组名代表首元素地址是数组名的性质,性质是不可改变的,不会因为加减就改变数组名是首元素地址的性质。

为什么传址调用就可以使用arr++了呢,因为函数接收到的不是数组,而是首元素的地址,这里的arr并不是数组名,而是一个存放了数组的首元素的指针变量,指针变量进行加减就是可以的了。

相关推荐
艾莉丝努力练剑7 小时前
【C语言16天强化训练】从基础入门到进阶:Day 7
java·c语言·学习·算法
小十一再加一7 小时前
【C初阶】自定义类型--结构体
c语言
zhysunny13 小时前
Day22: Python涡轮增压计划:用C扩展榨干最后一丝性能!
c语言·网络·python
YxVoyager13 小时前
【C标准库】详解<stdio.h>标准输入输出库
c语言·c++
.YM.Z19 小时前
数据在内存中的存储
c语言·内存
特立独行的猫a20 小时前
C/C++三方库移植到HarmonyOS平台详细教程(补充版so库和头文件形式)
c语言·c++·harmonyos·napi·三方库·aki
zh_xuan21 小时前
LeeCode 40.组合总和II
c语言·数据结构·算法
艾莉丝努力练剑1 天前
《递归与迭代:从斐波那契到汉诺塔的算法精髓》
c语言·学习·算法
小马学嵌入式~1 天前
数据结构:队列 二叉树
c语言·开发语言·数据结构·算法
KeithTsui1 天前
GCC C语言整数转换的理解(Understanding of Integer Conversions in C with GCC)
c语言·开发语言·算法