野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7232|回复: 4

c语言

[复制链接]
发表于 2015-3-17 20:08:58 | 显示全部楼层 |阅读模式
在学c指针时几个困惑的问题,说出来探讨探讨:
写出下面几个表达式的意思:
1.*++cp;
2.*cp++;
3.++*cp;
4.(*cp)++;
5.++*++cp;
6.++*cp++;
大神何在?
回复

使用道具 举报

发表于 2015-4-3 09:32:57 | 显示全部楼层

RE: c语言

  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. int main(void)
  4. {
  5.         int table[]={1,2,3,4,5,6,7};
  6.         int * p=table;
  7.        
  8.         printf("the result is\n%d\n%d\n%d\n%d\n%d\n%d\n",* ++p,*p++,++*p,(*p)++,++*++p,++*p++);
  9.         system("pause");
  10.         return 0;
  11. }
复制代码

运行结果是2,2,4,4,5,6
和想象中的不太一样
回复 支持 反对

使用道具 举报

发表于 2015-4-3 09:40:37 | 显示全部楼层
关于以上问题希望有更多探讨,谢谢分享!
回复 支持 反对

使用道具 举报

发表于 2015-4-3 16:04:06 | 显示全部楼层
以上测试代码有误,请多多包涵!
1.取下一个指针所指向的值(已测试)
2.取当前指针所指向的值,然后指针下移一个地址(已测试)
3.取出当前指针所指向的值并加1,指针不移动(已测试)
4.同3,如果有int a =(*p)++;int b=++*p;则b-a=1(已测试)
5取下一个指针所指向的值加1(已测试)
6.取出当前指针所指向的值加1,然后指针移动一个地址。如 int table[]={1,2,3,4};p=table;int a=++*p++;结果为a为2,*p为2,p=&table[1](已测试)
主要知识点是前/后缀++,和运算符优先级以及指针的移动单位。
回复 支持 反对

使用道具 举报

发表于 2015-5-7 10:43:00 | 显示全部楼层
slwope 发表于 2015-4-3 16:04
以上测试代码有误,请多多包涵!
1.取下一个指针所指向的值(已测试)
2.取当前指针所指向的值,然后指针 ...

4的b-a=2,别的没测,vc6.0测试
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-29 20:41 , Processed in 0.027668 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表