C语言,指针的一些运算

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

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

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

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

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

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

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

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

相关推荐
liujing102329291 小时前
Day13_C语言基础&项目实战
c语言·开发语言
sunny-ll6 小时前
【C++】详解vector二维数组的全部操作(超细图例解析!!!)
c语言·开发语言·c++·算法·面试
西装没钱买7 小时前
C语言多进程TCP服务器与客户端
服务器·c语言·tcp/ip·进程
嵌入式@秋刀鱼7 小时前
《第五章-心法进阶》 C++修炼生涯笔记(基础篇)指针与结构体⭐⭐⭐⭐⭐
c语言·开发语言·数据结构·c++·笔记·算法·visual studio code
whoarethenext7 小时前
使用 C/C++的OpenCV 裁剪 MP4 视频
c语言·c++·opencv
tiandyoin8 小时前
如何给 C:\Windows\WinSxS\ 瘦身?
c语言·开发语言·windows
呆呆的小鳄鱼10 小时前
如何刷新缓冲区(c++、c、linux)
linux·c语言·c++
W说编程11 小时前
算法导论第三章:数据结构艺术与高效实现
c语言·数据结构·算法
is081512 小时前
C语言运行时
c语言·开发语言
电院工程师13 小时前
轻量级密码算法PRESENT的C语言实现(无第三方库)
c语言·算法·安全·密码学