| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1297 人关注过本帖
标题:指针的简单printf(“%d”,*x+2)出来,点击去看详细吧,谢谢
只看楼主 加入收藏
s人圭日月
Rank: 2
等 级:论坛游民
帖 子:36
专家分:27
注 册:2016-6-22
结帖率:50%
收藏
 问题点数:0 回复次数:3 
指针的简单printf(“%d”,*x+2)出来,点击去看详细吧,谢谢
# include <stdio.h>
int main(void)
{
    int i,a[10],*x,*y;
    for (i=0;i<10;i++)
    {
        a[i]=i+1;
        printf("%d",a[i]);
    }
    printf("\n");
    x=a,y=&a[5];
    printf("%d\n",*x+2);
    printf("%d\n",*x++);
    printf("%d\n",*x+5);
    printf("%d\n",y-x);
return 0;
}
/*
--------------------------------
12345678910
3  ----------------------------->>>>>>>   这边四个箭头,我不懂其中的计算。x=a语言没有懂?是不是
1  ----------------------------->>>>>>>   等于a[0]一个意思??  那么*x+2,*x+5,他们也就差3个元素??这里答案都是vc++6.0
7  ----------------------------->>>>>>>
4  ----------------------------->>>>>>>
Press any key to continue

*/
搜索更多相关主题的帖子: include return 
2016-09-12 18:46
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
x=a,那么*x=a[0];,x++以后*x=a[1];
2016-09-12 19:59
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
a 在这个函数里面表示的是a[10]数组的地址,同时他正好也等于a[0]的地址。

*x  就是取出x所指地址上存储的元素,(本题中x=a,所以*x会取出x[0]的元素)
*x+2  注意算术优先级。取地址运算符是单目运算符优先级比较高,所以会比较先执行,所以*x==a[0]==1,所以输出3

*x++  自增运算和取值运算优先级相同,他们的结合方向是从右向左,所以应该*(x++)   x++和++x的区别你应该知道了吧(不知道请百度,顺便下载一张“C 优先级”的图表,以后编程有困惑都可以查看)。   由于在取值的时候x是未自增的,所以程序输出的是a[0]==1,只不过执行完这一行以后x指向a[1].不信,你可以试试。

*x+5  注意,执行完上一条语句后,此时x=&a[1],*x==2,所以...

研究指针地址取值和其他运算的时候,我建议你不仅仅是输出那个位置上存储的元素,可以通过printf("%p",x);//直接输出地址,便于理解
你需要一份优先级图表,不用背,但是碰到类似题目的时候可以拿出来看。比如我在看到*x++的时候就不知道到底是哪个优先级比较高,就需要翻查图表确认。  


[此贴子已经被作者于2016-9-12 20:38编辑过]


φ(゜▽゜*)♪
2016-09-12 20:29
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
# include <stdio.h>
int main(void)
{
    int i,a[10],*x,*y,k=5;
    for (i=0;i<10;i++)
    {
        a[i]=k+5;
        k+=2;
        printf("%d\t",a[i]);
    }
    printf("\n");
    x=a,y=&a[5];
    printf("%d\n",*x+2);
    printf("%d\n",*x++);
    printf("%d\n",*x+5);
    printf("%p-%p=%d\n",y,x,y-x);
return 0;
}
配合楼上的文字说明。好好理解下。
2016-09-12 20:56
快速回复:指针的简单printf(“%d”,*x+2)出来,点击去看详细吧,谢谢
数据加载中...
 
   



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

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