c语言入门经典里的一个简洁的例子,100分!#include<stdio.h>long* incomeplus(long*ppay){ long pay=0; pay=*ppay+10000; return &pay;}int main(void){ long your_pay=30000L; long*pold_pay=&your_pay; long*pn
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/01 00:08:59
![c语言入门经典里的一个简洁的例子,100分!#include<stdio.h>long* incomeplus(long*ppay){ long pay=0; pay=*ppay+10000; return &pay;}int main(void){ long your_pay=30000L; long*pold_pay=&your_pay; long*pn](/uploads/image/z/7633516-4-6.jpg?t=c%E8%AF%AD%E8%A8%80%E5%85%A5%E9%97%A8%E7%BB%8F%E5%85%B8%E9%87%8C%E7%9A%84%E4%B8%80%E4%B8%AA%E7%AE%80%E6%B4%81%E7%9A%84%E4%BE%8B%E5%AD%90%2C100%E5%88%86%21%23include%26lt%3Bstdio.h%26gt%3Blong%2A+incomeplus%28long%2Appay%29%7B+++++long+pay%3D0%3B+++++pay%3D%2Appay%2B10000%3B+++++return+%26amp%3Bpay%3B%7Dint+main%28void%29%7B+++++long+your_pay%3D30000L%3B+++++long%2Apold_pay%3D%26amp%3Byour_pay%3B+++++long%2Apn)
c语言入门经典里的一个简洁的例子,100分!#include<stdio.h>long* incomeplus(long*ppay){ long pay=0; pay=*ppay+10000; return &pay;}int main(void){ long your_pay=30000L; long*pold_pay=&your_pay; long*pn
c语言入门经典里的一个简洁的例子,100分!
#include<stdio.h>
long* incomeplus(long*ppay)
{
long pay=0;
pay=*ppay+10000;
return &pay;
}
int main(void)
{
long your_pay=30000L;
long*pold_pay=&your_pay;
long*pnew_pay=NULL;
pnew_pay=incomeplus(pold_pay);
//printf("old is %ld ,new is %d\n",*pold_pay,*pnew_pay);.(2)
/*printf("old is%d",*pold_pay);.(1)
printf("new is %d",*pnew_pay);*/.(1)
return 0;
}
该程序原本目的是想输出原来的工资,和加薪以后的工资,分别是30000和40000的,但这个程序显然是个错误的程序,因为这里的被调用函数incomeplus()返回的是其本地变量的地址
但是,在这个例子中,当主函数main里面的printf()输出函数选择第(1)种情况时,错误,大家都明白,于是结果如图
当选择第(2)中输出方式时,结果却!
c语言入门经典里的一个简洁的例子,100分!#include<stdio.h>long* incomeplus(long*ppay){ long pay=0; pay=*ppay+10000; return &pay;}int main(void){ long your_pay=30000L; long*pold_pay=&your_pay; long*pn
函数中的变量pay是开设在堆中的,如果采用(2)调用printf时先入栈的是*pnew_pay,正巧这时堆还未被printf冲掉,可以将已废弃的pay位置的值返回;而(1)由于先调用了一遍printf堆中的pay位置数据被用作其他而值被改过了,所以不对.
依此,你在(1)中将两个printf颠倒一下有可能还是能输出正确的值的.