本文主要是介绍自增运算符和printf语句和指针——初学C语言的浪荡第一学期,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
今天的第二个疑惑
Question
main()
{ char s[]=“159”,*p;
p=s;
printf("%c",*p++);
printf("%c",*p++);
}
程序运行后的输出结果是 ( A )
A) 15
B) 16
C) 12
D) 59
Thinking
这道题就是考察我们对++位置的区分理解。
比如i=1;
- a=i++; 那么先把1赋值给a,即a=1,然后i才加1
- a=++i; 那么先让i加1,即i=2,接着再把2赋值给a
然后到了这道题
一换到printf语句里面来,就不知道怎么搞了。经查阅
资料后,发现其实是一样的。
Solution
- 自增运算符“++”放在变量之前表示在使用变量之前,先使变量的值加1;放在变量之后表示在使用变量之后,再使变量的值加1。
- 语句p=s;使指针p指向字符串s的首地址,第一次输出语句先输出字符’1’,指针p再往后移一位,指向字符’5’的地址,第二个输出语句,同样先输出字符’5’,指针p再往后移一位,指向字符’9’的地址。(即这个时候1和5打印出来了,指针才指向9,但是没有打印)
- 所以最终答案选择A
Second Revision
然后又看到了一道变式题
有以下程序
int a=2;
int f(int *a)
{return (*a)++;}
main()
{ int s=0;
{ int a=5;
s+=f(&a);
}
s+=f(&a);
printf("%d\n",s);
}
执行后输出结果是( C )
A) 10
B) 9
C) 7
D) 8
本题中定义了一个全局变量a和局部变量a。在主函数中定义一个整型变量s并赋初值为0,接着定义了一个局部变量a并赋值为5,由于该局部变量的和全局变量a同名,全局变量在复合语句中将不起作用,然后调用函数f(&a)(该函数的作用是返回存储变量a中的值,并让该值加1,分析程序可知返回值为5,并让a值加1变为6),并将返回值加到s中。此时s的值为5,再执行该复合语句外的其他语句,同样调用函数f(&a),传递的参数是全局变量a,故其返回值为2,加到s中后s的值变为7,最后输出的s值为7。
这篇关于自增运算符和printf语句和指针——初学C语言的浪荡第一学期的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!