A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© waterfoxjie 中级黑马   /  2015-3-11 21:53  /  1481 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

分享一下基础测试碰到的一道简单的题目:以下程序运行后的打印结果是______
  1. #include
  2. void change(int *n);
  3. int main()
  4. {
  5. int a = 90;
  6. change(&a);
  7. printf("%d\n", a);
  8. return 0;
  9. }
  10. void change(int *n)
  11. {
  12. *n = 10;
  13. }
  14. #include<stdio.h>
  15. void change(int *n);
  16. int main()
  17. {
  18.     int a = 90;    //定义变量a并赋初值为90
  19.     change(&a);     //调用chang函数,函数中行参指针n指向a的地址
  20.     /*执行了这一行代码之后,a的值发生了变化,因为在执行chang函数时,首先分配了存储空间在行参n,指针n指向了a的地址,那么此时指针n的地址就是变量a的地址,chang函数中改变了指针n的值,那么同个地址的a的值也就相应的发生了变化,因此执行完这句代码之后,a的值变成了10;*/
  21.     printf("%d\n", a);
  22.     //输出结果是:10
  23.     return 0;
  24. }
  25. void change(int *n)   //定义了一个无返回值类型的函数,行参以指针的形式
  26. {
  27.     *n = 10;   //此处将行参的赋值为10
  28. }
复制代码
题中涉及到了一个知识点,就是老师在视频中将到的
(1)当形参时数组或者是指针的时候,所做的传递便不是值传递了,传递的是地址,因此当形参中的值发生了改变之后,也会影响外面变量的值
(2)当形参是基本数据类型的时候,此时做的只是单向传递,是值传递,形参的值改变的话,是不会影响外面变量的值的
举例来说,将上面的调用函数做下修改:
  1. void change(int n)   //定义了一个无返回值类型的函数,行参为整型
  2. {
  3.      n = 10;   //此处将行参的赋值为10
  4. }
复制代码
若调用的函数修改成这样,那么现在调用之后输出来的值就应该仍旧是90啦~~
虽然是个很简单的知识点,但是感觉还是会比较容易就忽略的一个地方,所以跟大家分享一下~~


5 个回复

倒序浏览
可以通过指针来改变函数的实参。
回复 使用道具 举报
解释中应该说是指针n 所指的地址,而不是指针n 的地址

说的很好,也很详细
回复 使用道具 举报
hastar 发表于 2015-3-11 21:59
解释中应该说是指针n 所指的地址,而不是指针n 的地址

说的很好,也很详细 ...

对哦~~谢谢提醒~~
回复 使用道具 举报
是这个样子~~
回复 使用道具 举报
好~~~~~~~~~~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马