c语言 地址+1,C语言中,为什么指针表达式的值+1.对应的地址值却+4?/为什么两个数组元素的地址相减之差不为地址之差?...

C语言中,指针+1运算并不简单地增加1,而是基于对象的大小。同样,两个数组元素地址相减并不直接等于地址差,而是下标差。这些行为都是由C语言标准规定的,涉及指针加减运算和数组成员间的地址计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在C语言中,我们常常用到的一个运算是让某个变量的值+1.

例如 M = M + 1。

而在实际运用中,我们发现

对于指针进行+1运算,算出来的结果是+4。

如下图

bb4a61b05bee10fe544389333c883e97.png

图中我们定义的 变量M 和指针Matrix如下:

int M = 3;

int* Matrix = {1,2,3};

可以看到,对于M和 Matrix ,+1运算的效果是不同的。

这个差异是因为C语言的标准中规定了 加法与减法运算对于地址的操作和对于值的操作是不同的,如下文中粗体所示:

C89

3.3.6 Additive operators

Syntax

additive-expression:

multiplicative-expression

additive-expression + multiplicative-expression

additive-expression - multiplicative-expression

Constraints

For addition, either both operands shall have arithmetic type, or one operand shall be a pointer to an object type and the other shall h

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值