C++:传值与传地址

    参数的传递方式有两种:传值和传地址。

  

    传值

传值方式是将实参的值复制到形参中,因此实参和形参是两个不同的变量,各有各的存储空间,函数形参可以看做是函数的局部变量。如图:

传值的最大好处就是函数调用不会改变调用函数实参变量的内容,因为当实参的值传递给形参后,所进行的运算都是围绕形参进行的,没有实参的参与,所以,不会影响到实参的值,避免了一些不必要的副作用。

例如:

#include<iostream>
using namespace std;
void test(int);

int main()
{
	int a;
	a=1;

	test(a);
	cout<<"a="<<a<<endl;

	return 0;
}

void test(int i)
{
	i++;
	cout<<"i="<<i<<endl;
}

执行结果:

从结果可以看出,在调用过程中,当把实参a=1赋给了形参i后,i自加1,输出i=2;但是实际上并没有影响到实参a的值,调用完成之后,a的值还是1.

传地址



      学过二代语言的人可能都接触过对寄存器的操作,在一些底层的语言中,对数据的读取操作中,有很大一部分是直接对地址中的数据来读写的,在高级语言中传递址的方式来传递参数虽然是通过指针引用这些实现的,但是原理感觉还是通过数据的地址对数据进行操作的,这种操作时对数据的直接操作。

  例如:

 

		#include<iostream>
		using namespace std;
		void test(int * i);

		int main()
		{
			int a;
			a=1;

			test(&a);
			cout<<"a="<<a<<endl;

			return 0;
		}

		void test(int * i)
		{
			(* i)++;
			cout<<"i="<<(* i)<<endl;
		}

执行结果:

 

其中,将形参i定义成指针类型,在使用时,指向a的内容,当调用test时,直接了改变a的值。

时间: 2024-07-30 08:25:11

C++:传值与传地址的相关文章

C语言及程序设计提高例程-6 参数传递方式:传值与传地址

贺老师教学链接  C语言及程序设计提高 本课讲解 我要交换! #include <stdio.h> void myswap(int x, int y) { int t; t=x; x=y; y=t; } int main() { int a,b; scanf("%d %d", &a, &b); printf("调用前: %d %d\n", a, b); myswap(a, b); printf("调用后: %d %d\n&quo

《C语言及程序设计》程序阅读——参数传递方式:传值与传地址

返回:贺老师课程教学链接 请分析下面程序的输出结果,对照在计算机上的运行结果,解释得到输出的过程. 建议:通过在纸上画出内存变化的过程,洞悉计算机执行的过程.(1) #include<stdio.h> void fun(int x,int y,int *z) { *z=x*x+y*y; } int main() { int a=31; fun(5,2, &a); printf("%d\n",a); return 0; } (2) #include<stdio.

php传值赋值和传地址赋值用法实例分析_php技巧

本文实例讲述了php传值赋值和传地址赋值用法.分享给大家供大家参考.具体如下: <?php $name = 'Simon'; //对变量$name进行赋值(传值赋值) $name_b = $name; //对变量$name_b进行赋值(传值赋值) $addr = &$name; //对变量$addr进行赋值(传地址赋值) $name = "Elaine"; //改变$name的值 echo $name; //输出$name,会发现$name的值发生了变化 echo $na

php传值赋值和传地址赋值用法实例分析

  本文实例讲述了php传值赋值和传地址赋值用法.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 <?php $name = 'Simon'; //对变量$name进行赋值(传值赋值) $name_b = $name; //对变量$name_b进行赋值(传值赋值) $addr = &$name; //对变量$addr进行赋值(传地址赋值) $name = "Elaine"; //改变$name的值 echo $name; //输

Java究竟是传值还是传引用?

1. 简单类型是按值传递的 Java 方法的参数是简单类型的时候,是按值传递的 (pass by value).这一点我们可以通过一个简单 的例子来说明: public class Test { public static void test(boolean test) { test = ! test; System.out.println("In test(boolean) : test = " + test); } public static void main(String[]

我对java到底传值还是传引用的理解

不少同学总是质疑java编程中参数的传递,到底是传值还是传引用?总是模棱两可,导致编程涉及到 这方面时很苦恼,关于这个问题,我在这里记述一下我的理解,欢迎批评指正. 首先锁定一个根本方向:java中只有传值! 这里就有同学纳闷了,只有传值还要传引用这一说法干吗?为了便于理解,我们又可以这样说: 在java中,简单数据类型是按值传递的,对象是按引用传递的...晕,这人怎么说话颠三倒四的, 唐僧了....哈哈,莫急,听我慢慢道来.... 1. 所谓传值,压栈的是参数值的副本,是把实参的值赋值给形参,

php函数的传值与传址(引用)详解

php中引用的用法: 1. 变量的引用赋值: $a = &$b 2. 函数调用时的引用参数传递     1) 早期php是在调用时通过&符号传递引用类型的变量, 比如: func(&$arg);     2) 后来, 函数的引用类型参数被规定为需要在函数声明时定义, 不如: function func(&$arg);        注: 引用声明时定义引用类型参数后, 运行时引用参数传递被废弃, 需要在php.ini中增加allow_call_time_pass_refer

C语言的传值与传址调用

传值调用并不能改变两个变量的值,而传址能. 为什么,因为,传值调用,仅仅是在函数内,调换参数的值. 而地址所指向的值,改变的不仅仅是函数内,函数外也改变. 请看代码: 这里还要注意:通常我们不会返回局部变量的地址. 1 #include <stdio.h> 2 3 void swap_value(int x,int y) 4 { 5 int temp; 6 temp = x; 7 x = y; 8 y = temp; 9 printf("传值函数内的输出 %d %d \n"

php foreach 传值还是传引用

php中foreach()的用法 foreach()有两种用法: 1:  代码如下 复制代码 foreach(array_name as $value)    {       statement;    } 这里的array_name是你要遍历的数组名,每次循环中,array_name数组的当前元素的值被赋给$value,并且数组内部的下标向下移一步,也就是下次循环回得到下一个元素.   2:  代码如下 复制代码 foreach(array_name as $key => $value)