以下是引用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.不知道我的思路对吗?