| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1284 人关注过本帖
标题:[求助]请教几道有关指针和算术表达式的简单题目.
只看楼主 加入收藏
inku
Rank: 1
等 级:新手上路
帖 子:122
专家分:0
注 册:2006-8-6
收藏
得分:0 
以下是引用ar7043在2006-8-17 17:05:48的发言:
第一题p+=2把p的地址向后移了两位。又自加表达式不是变成4了吗
我也是这么想的,请问这种思路对吗?
2006-08-17 23:15
wuyufenjr
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2006-7-20
收藏
得分:0 
以下是引用inku在2006-8-17 16:10:57的发言:
有这样一个语句:
int a[]={1,2,3,4,5,6,7,8,9,10},*p=a
则值为3的表达式是
A:p+=2 ,*(p++) /*先使p指向a[2]=3,再使p指向下一个无素,这里是后加,所以p还是指向a[2]这个元素*/
B:p+=2,*p++ /*先使p指向a[2]=3,++和*的运算级别相同,但是右结合性,所以先执行++运算,其实是和*(p++)一样的,参见A */
C:p+=2,*++p /*先使p指向a[2]=3,++和*的运算级别相同,但是右结合性,所以先执行++运算,再使p指向下一个无素,即a[3],再执行*运算,最终p指向a[3]=4*/
D:p+=2,++*p /*先使p指向a[2]=3,++和*的运算级别相同,但是右结合性,所以先执行*运算,得到p=&a[2],即*p=3,再执行++,使p的值加1,最终*p=4*/


有下面这样一个程序,它的显示结果是:
main()
{
char *d[]={"ab","cde"};
printf("%x",d[1]); /*d[1]表示下一个字符串中第一个字符的地十,即c 的地十,但是这里是有%x 的形式输出,也就是以十六进制输出*/
}
答案是:字符c的地址.我是这样理解这个答案的,指针数组是存放第一个元素地址的,d[0]表示"ab"中a的地址,那么d[1]就是"cde"中c的地址,这样理解对吗?还有,不管以十六进制还是其它形式输出都是c的地址对吗?和输出形式无关对吗?


有这么一段程序,它的输出结果是:
main()
{
i=5,j=9,x;
x=(i==j?i: (j=7)); /*i==j不成立,所以执行j=7,再把7赋值给x,这里的i根本没有改变他的值,所以最后i=5*/
printf("\n%d,%d",i, j);
}

答案是5,7,可我觉得应该是5,9.我是这样想的,x=(i==j?i: (j=7));这一步得出的结果是x=7,虽然x=7,但j和i的值都没有改变,所以输出的结果应该还是5,9.不知道我的思路对吗?

2006-08-18 11:29
inku
Rank: 1
等 级:新手上路
帖 子:122
专家分:0
注 册:2006-8-6
收藏
得分:0 
首先很感谢楼上高手解答,我还是有一点想不通,既然p+=2/*先使p指向a[2]=3
这样这个表达式的值已经是3了,那后面为什么要加*(p++),是不是多此一举了呢?请指教,谢谢!
2006-08-18 14:49
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
是多此一举

对不礼貌的女生收钱......
2006-08-18 14:50
inku
Rank: 1
等 级:新手上路
帖 子:122
专家分:0
注 册:2006-8-6
收藏
得分:0 

那就是说题目出错了?

2006-08-18 15:07
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
没,*p==3,表达式的结果是3,*p++等价于取*P的值,然后把p向后推移一个类型单位。所以表达式的值仍是3
您可以先看看书,看看a++和++a的区别以及运算符号的优先级.

对不礼貌的女生收钱......
2006-08-18 15:11
inku
Rank: 1
等 级:新手上路
帖 子:122
专家分:0
注 册:2006-8-6
收藏
得分:0 
以下是引用soft_wind在2006-8-18 15:11:42的发言:
没,*p==3,表达式的结果是3,*p++等价于取*P的值,然后把p向后推移一个类型单位。所以表达式的值仍是3
您可以先看看书,看看a++和++a的区别以及运算符号的优先级.

*p++等价于取*P的值,然后把p向后推移一个类型,*p已经等于3了,再向后移一位不就变成4了吗?

2006-08-18 22:37
cwande
Rank: 2
等 级:新手上路
威 望:3
帖 子:333
专家分:0
注 册:2006-8-18
收藏
得分:0 
*p是变成了四,但之前的*(p++)的值是3,
注意求的是*(p++)的值,而不是之后*P的值
就比如i=2,i++;此时i++的值是2,但之后i才=3

汗,都懒得写代码了.......... cheat了一个威望,哈.....
2006-08-18 23:19
inku
Rank: 1
等 级:新手上路
帖 子:122
专家分:0
注 册:2006-8-6
收藏
得分:0 
以下是引用cwande在2006-8-18 23:19:29的发言:
*p是变成了四,但之前的*(p++)的值是3,
注意求的是*(p++)的值,而不是之后*P的值
就比如i=2,i++;此时i++的值是2,但之后i才=3

我终于明白了,这么说*(++p)的值就是4了,因为
就比如i=2,++i;此时++i的值是3,但i的值还是3,不变,对吗?

2006-08-18 23:56
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-08-20 00:00
快速回复:[求助]请教几道有关指针和算术表达式的简单题目.
数据加载中...
 
   



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

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