C指针运算

本文通过一段C语言代码实例,详细解析了指针与数组的关系及运算过程。代码中涉及指针的自增操作、数组元素的修改以及printf函数的参数压栈规则。通过对代码的分析,揭示了指针在数组操作中的应用和C语言中的右向压栈特性。
摘要由CSDN通过智能技术生成
#include<stdio.h>
main()
{
    int b = 3;
    int arr[] = {6,7,8,9,10};
    Sint *ptr = arr;
    *(ptr++) += 123;
    printf("%d,%d\n",*ptr,*(++ptr));
}

问:代码输出什么?

A.8 8        B.130 8        C.7 7        D.7 8

解析:

提前要知道C中的printf计算参数时是从右向左压栈的。

几个输出结果分别如下:

Sint *ptr = arr;         指针ptr指向arr数组的第一个元素6

*(ptr++) += 123;        这段代码分成两步,首先*ptr +=123得数组第一个元素是129然后ptr++,使ptr指向数组的第二个元素7

最后输出语句printf("%d,%d\n",*ptr,*(++ptr));

因为从右向左压栈,所以先++ptr,ptr指向第三个元素,*(++ptr)就是第三个元素的值8

再看*ptr此时ptr经过前一步运算已经指向第三个元素就是8

所以答案选A

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值