m0_47428395 2022-10-05 20:21 采纳率: 100%
浏览 78
已结题

关于指针的问题,如何解决?

1、请问答案为什么是a\?
如下程序的执行结果——
main(){ int i;char s="a\ \ \ \ \ n"; for(i=0;s[i]!='\0';i++) ; printf("%c",(s+i)); }

2、如下程序的执行结果——
main()
{static int a[]={1,2,3,4,5,6}; int*p; p=a; *(p+3)+=2; printf("%d,%d/n", *p, *(p+3) }
A 1,3 B 1,6 C 3,6 D 1,4

  • 写回答

5条回答 默认 最新

  • fuill 2022-10-05 22:46
    关注

    第一题,循环后面有个逗号,所以是打印的是'\0'字符
    去掉这个逗号,那么打印的是 a\\
    \是转义字符,两个\打印一个\

    img

    第二题,p=a就是p指针指向数组的首个元素,*(p+3)+=2;这一句是p指针右边第三个元素+2,也就是4+2
    所以printf("%d,%d\n", *p, *(p+3));就是打印指针p所指向的值和指针向右移动3位所指向的值

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
  • 快乐鹦鹉 2022-10-05 20:32
    关注

    用代码块格式化一下吧,*号都看不见
    第一个输出应该是

    a\\加上换行 
    因为\是转义字符,要输出\字符的话,就需要两个斜杠。所以 a\\\\\n实际是字符a,两个斜杠字符,以及一个\n换行符组成
    最后printf输出数组第0个和第3个元素值,也就是1,6。所以选B
    

    第二个中,p=a,使得p指向a数组首地址,*(p+3)+=2就是将数组第三个元素4的值加上2,就是6.

    评论 编辑记录
  • 喜爱cpp 2022-10-05 22:35
    关注

    建议你将代码格式化一下,用csdn自带的代码编辑器。。然后再提问。。。。

    评论
  • 小白小白你好菜 2022-10-05 22:36
    关注

    其他的不说,你第一个程序居然能运行起来?char类型用字符串赋值?
    假设你是少打了*符号,你的for循环就把i挪到了字符串结尾的下一个了,即\n后面的'\0'了,这个时候再输出printf("%c),只能是单个字符。
    至于你的a\是怎么输出来的,你还是先把题目复制正确再来问吧

    评论
  • CSDN-Ada助手 CSDN-AI 官方账号 2022-10-09 16:36
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 10月13日
  • 已采纳回答 10月5日
  • 创建了问题 10月5日

悬赏问题

  • ¥15 cuda.jit加速报错
  • ¥15 Octave 安装工具箱出错 Only Win32 target is supported!
  • ¥15 docker save的不能在另一台设备运行
  • ¥15 Unity Animation Rigging使用问题
  • ¥15 mbedtls握手返回-7200
  • ¥30 c++ http服务器
  • ¥15 express连接mssql,每条额外附加了语句
  • ¥20 IQOO12如何有效ADB方法
  • ¥15 ios如何获取用户的订阅情况
  • ¥15 复杂表达式求值程序里的函数优先级问题