| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 254 人关注过本帖
标题:把一个长久困惑解决了,想和同是新人菜鸟的各位分享下。
只看楼主 加入收藏
ouyangshit
Rank: 3Rank: 3
来 自:China
等 级:论坛游侠
帖 子:155
专家分:107
注 册:2014-10-25
结帖率:100%
收藏
 问题点数:0 回复次数:1 
把一个长久困惑解决了,想和同是新人菜鸟的各位分享下。
程序代码:
/* 关于p++和++p的讨论 */
/* 我是个小菜鸟,有很多问题不懂,今天把一个长久的困惑解决了,和同是菜鸟的朋友分享下 */
/* 有疏漏错误请指出,谢谢,不喜勿喷。 */
#include<stdio.h>
int main()
{
    int a[]={0,1,2,3,4,5,6,7,8,9},*p=a;  /* 1. 定义指针变量,把数组 a 的起始地址赋值给 p */
    printf("%d\n",*p);                   /* 2. *p=a[0] */
    printf("%d\n",*++p);                 /* 3. 先 p=p+1 ,p 所指的数组项右移了一位 然后 *p , 即取 a[1] */
    printf("%d\n",*(++p));               /* 4. 再 p=p+1 然后 *p , 即取a[2] */
    printf("%d\n",*p++);                 /* 5. *p++,先用 *p 然后 p=p+1 , 值得注意的是新值p这里用不到,下一条语句用到 , 即这里还是取a[2]*/
    printf("%d\n",*p);                   /* 6. 证明了 5. 所说的, 这里取 a[3] */
    printf("%d\n",*(p++));               /* 7. 这里虽然有个括号, 但是新的p还是再下一条语句说使用, 这里还是取 a[3] */
    printf("%d\n",*p);                   /* 8. 证明 7. 所说的,这里取 a[4] */
    return 0;                            
}

/* 值得注意的是 
              *++p ;

 类似是 :
              *p;
              p=p+1;
还有在这个小程序里,指针的移动是个连续的过程,即使运算在printf里面。下次用到的p是上次改变的p */

图片附件: 游客没有浏览图片的权限,请 登录注册
2014-11-14 12:53
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
祝楼主学习愉快
2014-11-14 12:55
快速回复:把一个长久困惑解决了,想和同是新人菜鸟的各位分享下。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036049 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved