黑马程序员技术交流社区
标题:
形参传递的问题
[打印本页]
作者:
waterfoxjie
时间:
2015-3-11 21:53
标题:
形参传递的问题
分享一下基础测试碰到的一道简单的题目:以下程序运行后的打印结果是______
#include
void change(int *n);
int main()
{
int a = 90;
change(&a);
printf("%d\n", a);
return 0;
}
void change(int *n)
{
*n = 10;
}
#include<stdio.h>
void change(int *n);
int main()
{
int a = 90; //定义变量a并赋初值为90
change(&a); //调用chang函数,函数中行参指针n指向a的地址
/*执行了这一行代码之后,a的值发生了变化,因为在执行chang函数时,首先分配了存储空间在行参n,指针n指向了a的地址,那么此时指针n的地址就是变量a的地址,chang函数中改变了指针n的值,那么同个地址的a的值也就相应的发生了变化,因此执行完这句代码之后,a的值变成了10;*/
printf("%d\n", a);
//输出结果是:10
return 0;
}
void change(int *n) //定义了一个无返回值类型的函数,行参以指针的形式
{
*n = 10; //此处将行参的赋值为10
}
复制代码
题中涉及到了一个知识点,就是老师在视频中将到的
(1)当形参时数组或者是指针的时候,所做的传递便不是值传递了,传递的是地址,因此当形参中的值发生了改变之后,也会影响外面变量的值
(2)当形参是基本数据类型的时候,此时做的只是单向传递,是值传递,形参的值改变的话,是不会影响外面变量的值的
举例来说,将上面的调用函数做下修改:
void change(int n) //定义了一个无返回值类型的函数,行参为整型
{
n = 10; //此处将行参的赋值为10
}
复制代码
若调用的函数修改成这样,那么现在调用之后输出来的值就应该仍旧是90啦~~
虽然是个很简单的知识点,但是感觉还是会比较容易就忽略的一个地方,所以跟大家分享一下~~
作者:
风中一场梦
时间:
2015-3-11 21:56
可以通过指针来改变函数的实参。
作者:
hastar
时间:
2015-3-11 21:59
解释中应该说是指针n 所指的地址,而不是指针n 的地址
说的很好,也很详细
作者:
waterfoxjie
时间:
2015-3-11 22:13
hastar 发表于 2015-3-11 21:59
解释中应该说是指针n 所指的地址,而不是指针n 的地址
说的很好,也很详细 ...
对哦~~谢谢提醒~~
作者:
Theshy
时间:
2015-3-11 23:45
是这个样子~~
作者:
waterfox
时间:
2015-3-12 00:35
好~~~~~~~~~~~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2