c语言指针加法

在C语言中,指针加法涉及到指针运算,其中加法的结果取决于指向的数据类型的大小。下面逐一解释这三个表达式:

  1. (void *)p + 1;

    在C标准中,对void*指针进行算术运算是未定义的,void*是一种特殊的指针类型,代表“未指定类型的指针”,并不关联任何具体的数据类型大小。因此,在许多编译器上这样的操作可能会产生编译错误。不过,有些编译器可能会将void*当做char*来处理(因为char的大小总是1),在这种编译器上(void *)p + 1;可能会将指针p向前移动1个字节,但这是编译器特定的行为,不具有可移植性。

  2. (char *)p + 1;

    这个表达式将指针p转换为char*类型的指针,然后向前移动1个字节(因为char的大小为1个字节)。无论原始指针p指向何种数据类型,转换为char*后加1都将地址增加1个字节。

  3. (unsigned int *)p + 1;

    这个表达式将指针p转换为指向unsigned int类型的指针,然后向前移动sizeof(unsigned int)个字节的距离。unsigned int的大小根据不同的平台和编译器,通常是4个字节(在32位系统上)。所以如果punsigned int*类型,那么p + 1将使指针向前移动4个字节。

总结一下,指针加法中的"加1"实际上是让指针向前移动一定数量的字节,这个数量等于它所指向的数据类型的大小

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值