鱼C论坛

 找回密码
 立即注册
查看: 5848|回复: 16

c语言输出问题

[复制链接]
发表于 2012-7-14 11:53:22 | 显示全部楼层 |阅读模式
5鱼币
代码:#include<stdio.h>int k=1;main(){fun(k);printf("%d\n",k);}fun(int k){k++;k=k*6;}求结果和解题过程!!
答案是1,还是12?

点评

麻烦把代码的格式编辑好。  发表于 2012-7-14 15:30
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-7-14 13:44:32 | 显示全部楼层
答案是1。因为对于函数fun来说,传进去的是1,这个你应该明白吧(吧全局变量k的值给了fun),但是是fun的局部变量得到了这个值,而fun函数对它进行的所有操作都是对这个形参的操作,而不是对全局变量k的操作
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-14 13:45:19 | 显示全部楼层
当函数执行结束之后,形参k被释放
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-14 13:51:06 | 显示全部楼层
结果是1 函数fun在函数里面有定义了变量名k 所以 外部变量k 对函数来说是不可见的  在函数内部修改k 不会对外部变量k造成影响 所以 在main函数中输出k是原来的值 也就是 1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-14 14:18:24 | 显示全部楼层
1,fun里面的int k是属于fun子函数的而,在全局变量的int k是属于全局变量,全局变量的k写入子函数中的k后,进过fun子函数运行,是改变子函数的k值,而全局变量并没有改变
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-14 14:21:01 | 显示全部楼层
顺便说下,如果在C语言中,你想从fun取回值,你就子函数给个返回值,如 char fun(){.....return k;},然后再主函数中调用:main(){k=fun(k);}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-15 02:40:51 | 显示全部楼层
  1. #include <stdio.h>

  2. int k = 1;

  3. fun(int k)
  4. {
  5.         k++;
  6.         k=k*6;
  7. }

  8. main()
  9. {
  10.         fun(k);
  11.         printf("%d\n",k);
  12. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-15 14:54:36 | 显示全部楼层
  1. #include<stdio.h>

  2. int k=1;

  3. main()
  4. {
  5.         int fun(int k);                        //还有要是你定义的函数 在你调用的后面  那么你必须在调用函数 之前要做声明
  6.         int result;
  7.         result=fun(k);
  8.         printf("%d\n",result);
  9. }

  10. int fun(int k)
  11. {
  12.         k++;
  13.         k=k*6;
  14.         return k;// 如果你的fun 函数 没有声明类型的话 那么编译器默认的是返回值是int 类型  所以在函数最后 要用return  返回一直值
  15. }
复制代码
答案是12
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-15 14:58:59 | 显示全部楼层
  1. #include<stdio.h>

  2. int k=1;

  3. main()
  4. {
  5.         void fun(int k);                       
  6.         fun(k);   //  在你用 k的 值 当实参 传进去的 时候 在函数里面 变化的 值 是 j 但j 的 作用域 只在与 fun 函数里面 值传递 形参的变化不能影响到实参
  7.         printf("%d\n",k);               
  8. }

  9. void fun(int j)                                //这里你定义的形参 最好不要和 全局变量的k 相同  改成 j  
  10. {
  11.         j++;
  12.         j=j*6;
  13. }
复制代码
还有一种情况就是 如果 你定义的 fun 函数  是 void 类型的 话 那么 结果就是 1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-15 14:59:11 | 显示全部楼层
  1. #include<stdio.h>

  2. int k=1;

  3. main()
  4. {
  5.         void fun(int k);                       
  6.         fun(k);   //  在你用 k的 值 当实参 传进去的 时候 在函数里面 变化的 值 是 j 但j 的 作用域 只在与 fun 函数里面 值传递 形参的变化不能影响到实参
  7.         printf("%d\n",k);               
  8. }

  9. void fun(int j)                                //这里你定义的形参 最好不要和 全局变量的k 相同  改成 j  
  10. {
  11.         j++;
  12.         j=j*6;
  13. }
复制代码
还有一种情况就是 如果 你定义的 fun 函数  是 void 类型的 话 那么 结果就是 1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-15 21:15:35 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-15 21:16:24 | 显示全部楼层
丿夏夜灬彬刂 发表于 2012-7-15 14:59
还有一种情况就是 如果 你定义的 fun 函数  是 void 类型的 话 那么 结果就是 1

k的值会是多少 和 函数的返回值类型完全没联系 这个void有误导的意味了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-15 22:31:00 | 显示全部楼层
加个static试试
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-19 20:21:23 | 显示全部楼层
×爲妳◎≈_倾僾 发表于 2012-7-15 22:31
加个static试试

在哪里加,能否给出详细结果?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-20 10:40:02 | 显示全部楼层
小鱼苗
帮顶
顺便混个脸熟
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-20 19:12:10 | 显示全部楼层
  1. #include<stdio.h>

  2. int k=1;                //全局变量k =1;

  3. main()
  4. {
  5.         int fun(int k);
  6.         fun(k);               
  7.         printf("%d\n",k);
  8. }

  9. int fun(int k)                //你的fun 函数没有类型 编译器默认为int 类型
  10. {
  11.         k++;
  12.         k=k*6;
  13.         return k;                //所以必须返回一直值
  14. }

  15. ///////////////执行过程///////////////
  16. /* 你定义咯一个全局变量k =1 ; 然后执行到 主函数 因为你的函数是在 主 函数后面定义的
  17. 又 你在主函数主要调用 所以必须作声明 不然编译的时候会出现警告,你的主 函数 声明了
  18. fun 函数后 然后把k的值 当做实参 调用 fun 函数 , 然后执行fun函数   这时候形参k 接收 实参
  19. k 传过来的 值   注意 :实参K 与 形参 k 不是共占一段存储空间的  各自占用自己的存储空间
  20. 你采用的是值传递的方式 传递参数的  在执行函数的时候 形参k ++ 执行完后 形参k 的值 变为了 2;
  21. 实参k 的值 还是 1  应该你采用的是值传递的方式传递参数的 所以形参K的改变并不会影响带 实参k 的值
  22. 然后执行 k=k*6  这时候 形参K=12  但是实参K 还是=1的  执行完fun 函数后 你就打印了 实参K 的 值
  23. 实参K 的值还是1  所以你打印出来的结果为1 */
  24. ///////////////////////////////////
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-23 14:30:37 | 显示全部楼层
专业的回答啊!!!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-14 03:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表