本文主要是介绍指针--传址和传值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在我们之前的学习中,我们学到了指针等相关知识,那么传址和传值是什么意思呢?顾名思义,传值是将变量传给函数,传址就是把变量的地址传给函数
我们先来复习一下前面的知识,当然,详情可以通过下面链接学习
指针相关知识(入门)-CSDN博客
形参和实参:
形参(parameter):形参(形式参数)是在函数定义中出现的参数,是一个虚拟参数,调用之前并没有给他分配内存,可以看作是一个占位符,在函数定义时没有实际的数值,只有在函数调用时才会接收到传递进来的数据;只是因为函数需要从别处传递数据,为了表示此数据,起了一个名字,是出于函数形式上的考虑,故称之为形参。
实参(argument):实参(实际参数)是在函数中实际出现的参数,实参的值可以是常量、变量、表达式、类等,实参必须要有确定的值。
注意:
形参是一个名字,本身不占内存,只有在函数调用时才会分配内存;
形参在函数定义时出现,在函数体内可以使用,离开该函数体则不能使用;
形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放分配的内存单元,除了重新调用,否则不能再重新使用形参。
实参是一个变量,在定义时就已分配内存地址。
实参出现在主调函数中,进入被调函数时不能使用。
实参:全局变量:程序运行期一直存在,从程序开始到结束。
局部变量:随着函数的结束,即被销毁
传值
函数的实参传给形参时,形参是实参的一份临时拷贝,形参有自己的独立空间,对形参的修改不能影响实参
如果按照我们的正常逻辑,将两个整数类型的值调换,用函数代码如下
int Swap(int x, int y)
{int z;z = x;x = y;y = z;
}int main()
{int a = 0;int b = 0;scanf("%d %d", &a, &b);printf("%d %d\n", a, b);Swap(a, b);printf("%d %d\n", a, b);return 0;
}
但是运行结果却与预期不一样
这就是改变了形参但是对实参没有影响的原因
正确代码如下所示
int Swap(int* px, int* py)
{int z = 0;z = *px;*px = *py;*py = z;
}int main()
{int a = 0;int b = 0;scanf("%d %d", &a, &b);printf("%d %d\n", a, b);Swap(&a, &b);printf("%d %d\n", a, b);return 0;
}
那么,通过上面的学习,我们来总结一下,使用传值和传址的情况吧
传值:只是需要主函数里面的变量值计算
传址:函数内部要修改主函数中的变量值
通俗的说,就是如果在函数调用里面需要用到主函数里面的变量并且对变量进行修改或操作,那么就要用传址,才能使调用函数对主函数操作成功;反之,如果调用函数里面不对主函数修改,只是要用到主函数里面的变量值,就用传值
这篇关于指针--传址和传值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!