c语言-C语言题程序第二个输出结果是124还是125呢?求大侠帮忙解释

问题描述

C语言题程序第二个输出结果是124还是125呢?求大侠帮忙解释
#include
int change(int *data)
{ return (*data)++;}
main()
{ int data=123;
change(&data);
printf(""%ddata);
data=change(&data);
printf(""%d""data);
printf(""n"");}
VC++里程序运行结果为:124124----第二个输出结果不是应该为125吗?为何是124呢?求解答

解决方案

change(&data); 使data加1,
但是{ return (*data)++;}
在函数内是返回data之后,再将data加1的,即data是加1了,可是返回值还是原来的值。
所以,data又被赋回了原来的值。
如果要输出124,125,那么把{ return (*data)++;}改成{ return ++(*data);}即可。

解决方案二:
其实,就是要注意这两句:
change(&data);
data=change(&data);
第二句的赋值,导致函数体内的 ++ 的运行结果,被函数返回值覆盖了。

解决方案三:
结果是124 124
你修改指针不会作用到实参上

解决方案四:

 #include <stdio.h>int change(int* data){ return ++(*data);}main(){ int data=123; change(&data); printf(""%ddata); data=change(&data); printf(""%d""data); printf(""n"");}

这样是124 125

解决方案五:
以上程序的运行结果应该是:123 124
a++,是先返回 a 的值,再 a 自加一。

解决方案六:
(*data)++;是先用再自加,所以chang()返回的是没有增加的值,然后又把这个值赋值给了data,所以data无变化。

解决方案七:
第二次调用change()函数,首先保存临时变量124,然后对data的内容加1,这时全局data中的内容是125。然后change()函数返回保存的临时变量124。main()中将返回值赋值给data。这时全局data又变成124。因此第二个结果为124

解决方案八:
return (*data)++ 的顺序是先返回data的值,再执行data++,第一次调用函数时,函数的值为123,data的值变124,第二次调用函数时,函数的值为124,data的值为125,而此时执行data=change(&data),则第二次返回的函数值赋给data,所以data的值变为124

时间: 2024-08-03 21:04:25

c语言-C语言题程序第二个输出结果是124还是125呢?求大侠帮忙解释的相关文章

struct-求大侠帮忙解释如下C程序每句含义,谢谢

问题描述 求大侠帮忙解释如下C程序每句含义,谢谢 #include ""stdio.h""#includestruct w{ char low; char high;};union u{ struct w byte; int word;}uu;main(){ uu.word=0x1234; printf(""Word value:%04xn""uu.word); printf(""High value:%0

c语言-求大侠帮忙:C语言程序设计---编程题(以下所有题目程序应是非递归的)

问题描述 求大侠帮忙:C语言程序设计---编程题(以下所有题目程序应是非递归的) 编写一个函数insert(s1,s2,ch),实现在字符串s1中的指定字符ch位置处插入字符串s2. 学校工会组织活动,要求有8名教师参加,这8名教师将分别从A学院3名教师.B学院5名教师.C学院6名教师中任意抽取,且其中必须有B学院的教师参加,请编程输出所有可能的方案 已知在C盘根目录下存有文本文件"file1.txt",编程统计文件"file1.txt"中每个字母字符和每个数字字符

c语言-C语言将两个递增有序单链表归并为一个降序的单链表,求大侠帮忙看看

问题描述 C语言将两个递增有序单链表归并为一个降序的单链表,求大侠帮忙看看 #include #include #define N 8 typedef struct list { char c; struct list *next; } SLIST; SLIST *creat(char *a) { SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST)); for(i=0; i { q=(SLIST *)malloc(sizeof(SLI

helloworld-为生么这个程序几个编译程序都无法显示呀??求大神解释下!!

问题描述 为生么这个程序几个编译程序都无法显示呀??求大神解释下!! public class HelloWorld{ public static void main(String[] args) { int num = 999; int count = 0; for(;(num/10)>1; count++) { ; } System.out.print("它是个"+count+"位的数"); } } 解决方案 for(;(num/10)>1; cou

string-C++程序编写一个学生管理系统出了一个问题,求大家帮忙看一下是哪出了问题

问题描述 C++程序编写一个学生管理系统出了一个问题,求大家帮忙看一下是哪出了问题 #include #include using namespace std; class Student() { int no; string name; float score; Student *per; Student *next; public: Student(); Student *find(int i_no); void edit(string i_newname,float i_score); v

c语言-C编程题考题请教大神帮忙解答,非常感谢

问题描述 C编程题考题请教大神帮忙解答,非常感谢 求大侠帮忙:C语言程序设计---编程题(以下所有题目程序应是非递归的) 程序实现任意两个字符串s1.s2的比较.要求: 1) 字符串的比较写一函数sub()实现,不得调用标准库函数strcmp; 2) 在主函数中完成数据的输入与结果的输出. 如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)和等于A,则将整数A和B称为亲密数对.编程求5000以内的全部亲密数对. 程序实现将无序整数数组压缩成有序数组

c语言-C语言sizeof(&amp;amp;quot;&amp;amp;quot;) strlen(&amp;amp;quot;&amp;amp;quot;)

问题描述 C语言sizeof("") strlen("") 在32位编译系统中,字符型变量占1个字节,则sizeof("") .strlen("")分别为()A.1 2 B.2 1 C.2 0 D. 2 2 求大侠详细解释 解决方案 sizeof("")=2 sizeof是编译器在编译时计算,计算括号中内容的大小,注意,这和地址没关系,因为这发生在编译期 那么""是多大呢?是1个字符,再

c语言-C语言的文件中,数据以记录为界限,便于区分 ?

问题描述 C语言的文件中,数据以记录为界限,便于区分 ? 以下叙述中不正确的是 . A.以二进制格式输出文件,则文件内容与内存中完全一致: B.定义:int n=123:若以ASCII文件的格式存放,变量n将在磁盘上占3个字节:C.C语言中,没有输入输出语句,对文件的读/写都是用库函数来实现的:D.C语言的文件中,数据以记录为界线,便于区分. ===参考答案为D,求大侠详细解释 解决方案 数据库是以记录为界线来区分,C语言文件没有这个说法.

杭电oj2000题, c语言,我的程序不对,那应该是什么样子的

问题描述 杭电oj2000题, c语言,我的程序不对,那应该是什么样子的 #include "stdio.h" int main() { char max,x,y,z; scanf("%c%c%c",&x,&y,&z); while( scanf(%c%c%c,&x,&y,&z)!=EOF) { if( 'x'>'y' ) if( 'y'>'z') printf("%c %c %cn",