`
498320858
  • 浏览: 392920 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

php的数组传值调用与传址调用

    博客分类:
  • php
阅读更多

在java中数组的调用默认是是传址调用:主体方法中传递一个数组给某个方法,在该方法内修改了数组的某个值;回到主方法中会发现数组已经发生了改变;

 

测试代码:

public class ArrayTest {

	public static void main(String[] args){
		Map[] maparray=new Map[3];
		for (int i = 0; i < maparray.length; i++) {
			Map<String,String> map=new HashMap<String,String>();
			map.put("a", i+"_ajkcz");
			map.put("c", "werq_"+i);
			maparray[i]=map;
		}

		System.out.println("++++++++++++++++++++++++");
		for (int i = 0; i < maparray.length; i++) {
			Map<String,String> map=maparray[i];
			Iterator it=map.keySet().iterator();
			while(it.hasNext()){
				String key=(String) it.next(); 
				System.out.println(key+"\t"+map.get(key) );
			}
		}
		
		System.out.println("++++++++++++++++++++++++");
		new ArrayCharge().printAndChangeArray(maparray);
		

		System.out.println("++++++++++++++++++++++++");
		for (int i = 0; i < maparray.length; i++) {
			Map<String,String> map=maparray[i];
			Iterator it=map.keySet().iterator();
			while(it.hasNext()){
				String key=(String) it.next(); 
				System.out.println(key+"\t"+map.get(key) );
			}
		}
		
		
		
	}
	
	
}


class ArrayCharge {
	
	public void printAndChangeArray(Map[] maparray){
		for (int i = 0; i < maparray.length; i++) {
			Map<String,String> map=maparray[i];
			map.put("a",i+"________");
		}
		
		for (int i = 0; i < maparray.length; i++) {
			Map<String,String> map=maparray[i];
			Iterator it=map.keySet().iterator();
			while(it.hasNext()){
				String key=(String) it.next(); 
				System.out.println(key+"\t"+map.get(key) );
			}
		}
	}


}

控制台输出结果:
++++++++++++++++++++++++
c	werq_0
a	0_ajkcz
c	werq_1
a	1_ajkcz
c	werq_2
a	2_ajkcz
++++++++++++++++++++++++
c	werq_0
a	0________
c	werq_1
a	1________
c	werq_2
a	2________
++++++++++++++++++++++++
c	werq_0
a	0________
c	werq_1
a	1________
c	werq_2
a	2________

 

 

而在php中,数组的调用默认是传值调用,在字方法中修改了数组,在父方法中无法察觉

 

测试代码:

<?php 

$arraytest=array();
for($i=0;$i<3;$i++){
	$child=array();
	$child['keystr']='key'.$i;
	$child['valuestr']='value'.$i;
	$arraytest[]=$child;
}

print_r($arraytest);

print_r("+++++++++++++++++++++++++");
for($i=0;$i<count($arraytest);$i++){
	$child=$arraytest[$i];
	$child['valuestr']="_________".$i;
}


print_r($arraytest);

print_r("+++++++++++++++++++++++++");

?>

控制台输出:
Array (
 [0] => Array (
            [keystr] => key0
            [valuestr] => value0
 )
 [1] => Array (
 [keystr] => key1
 [valuestr] => value1
 )
 [2] => Array ( 
[keystr] => key2
 [valuestr] => value2 
)
 )
 +++++++++++++++++++++++++
Array (
 [0] => Array ( 
[keystr] => key0
 [valuestr] => value0 
) 
[1] => Array (
 [keystr] => key1 
[valuestr] => value1
 ) 
[2] => Array ( 
[keystr] => key2 
[valuestr] => value2
 ) 
) +++++++++++++++++++++++++

 

 

如果希望在php中也能类似java中传数组参数给字方法,字方法处理完成后父方法中数组也跟随改变则需要在传递参数时不传递值而是传递值的指针,例如p的值是100,即$p=100;在传递p给字方法时需要传递的参数则为“&$p”

 

测试代码:

<?php 

$arraytest=array();
for($i=0;$i<3;$i++){
	$child=array();
	$child['keystr']='key'.$i;
	$child['valuestr']='value'.$i;
	$arraytest[]=$child;
}

print_r($arraytest);

print_r("+++++++++++++++++++++++++");
for($i=0;$i<count($arraytest);$i++){
	$child=&$arraytest[$i]; //注意这里加了一个指针符号,代表是传址调用
	$child['valuestr']="_________".$i;
}


print_r($arraytest);

print_r("+++++++++++++++++++++++++");

?>

控制台输出:
Array (
 [0] => Array (
 [keystr] => key0 
[valuestr] => value0 
)
 [1] => Array (
 [keystr] => key1 
[valuestr] => value1 
) 
[2] => Array ( 
[keystr] => key2 
[valuestr] => value2 
) 
)
 +++++++++++++++++++++++++
Array ( 
[0] => Array ( 
[keystr] => key0 
[valuestr] => _________0 
)
 [1] => Array ( 
[keystr] => key1 
[valuestr] => _________1 
)
 [2] => Array ( 
[keystr] => key2 
[valuestr] => _________2 
) 
)
 +++++++++++++++++++++++++

 

 

0
0
分享到:
评论

相关推荐

    传址调用 传址调用 传址调用 传址调用

    传址调用 传址调用 传址调用 传址调用传址调用 传址调用 传址调用 传址调用

    C++传值调用与引用调用区别实例代码

    ### C++中的传值调用与引用调用 在C++编程语言中,函数调用是一种常见的编程结构,用于执行特定任务或计算结果。当一个函数被调用时,可以通过不同的方式传递参数,其中最常见的是传值(call by value)和传引用(call...

    浅谈js中的引用和复制(传值和传址)

    同样,对于字符串,虽然其内容不可变,但在比较时被视为传值比较。 然而,对于引用类型,赋值实际上是复制了一个引用,即进行“传址”。例如,`var a = [1]; var b = a;`此时,`b`和`a`都指向同一个数组。如果修改`...

    向DLL传递数组参数的实现方法

    在编程领域,动态链接库(DLL)是一种共享...需要注意的是,由于不同编程语言间的差异,DLL的接口设计和调用方式可能会有所不同,因此在实际操作时要确保与DLL的文档或开发者进行沟通,以确保正确无误地传递数组参数。

    C语言中的三种调用中的其中一种-传值调用.c

    传值调用

    C语言函数参数传递的几个问题

    在《C语言函数参数传递的几个问题》一文中,作者古丽孜拉·安尼瓦尔(伊犁师范学院计算机科学与技术系)深入探讨了函数参数传递的几种关键类型——传值调用和传址调用,以及数组名和函数名作为形参的本质。...

    c#几个区别传值和传址的好例子

    在C#编程中,了解和区分传值与传址的概念至关重要,因为这直接影响到函数调用时参数的处理方式,从而影响程序的行为。下面通过两个示例来详细讲解这两个概念。 **传值(Pass by Value)** 在C#中,基本类型(如int...

    JNA调用C++动态库,传入二维数组,通过C++返回二维数组,java调用C++完整案例

    本案例将详细介绍如何使用JNA来调用C++动态库,特别是处理二维数组的输入和输出。 首先,我们需要了解JNA的基本原理。JNA通过映射Java接口到本地函数,实现了跨语言调用。它提供了一个简洁的方式来定义C/C++函数...

    PHP传参之传值与传址的区别

    在PHP中,函数参数的传递方式有两种:传值和传址。了解这两种传递方式的区别对于编写高质量的PHP代码至关重要。 传值(Pass by Value)是默认的参数传递方式,意味着当函数参数通过值传递时,实际上传递的是参数值...

    第二章 程序设计语言基础知识.pdf

    程序设计语言基础知识 ...在函数调用中,需要注意传值调用和传址调用的区别。传值调用不会改变实际参数的值,而传址调用可以改变实际参数的值。例如,在交换两个整数的值时,需要使用传址调用,否则无法达到目的。

    Flex中函数传值调用Demo

    2. **函数定义与调用**: 在ActionScript中,函数定义通常包括函数名、参数列表和函数体。例如: ```actionscript function myFunction(param1:Type1, param2:Type2):ReturnType { // 函数体 } ``` 调用函数...

    Flash老虎机源文件 Asp.net传值调用源码 Asp.net连Access库

    包含内容: 1.Flash8.0制作的老虎机计数器源文件,脚本版本为ActionScript2.0,功能为滚动停止后显示外传参数的数值 2.Html对Flash文件的传值调用...3.Asp.net对Flash文件的传值调用 4.Asp.net连接Access数据库读取数据

    C#调用C++ Dll关于结构体数组引用的传递及解析使用的展示代码

    ### C#调用C++ DLL:结构体数组引用的传递及解析使用详解 #### 引言 在跨语言编程环境中,经常会遇到不同编程语言之间进行交互的需求。C#与C++之间的互操作就是一个典型场景。当C#需要调用C++开发的动态链接库...

    easyUi弹出window窗口传值与调用父页面的方法,子页面给父页面赋值

    综上所述,EasyUI弹出窗口的传值与调用父页面方法涉及到前端页面交互的基本技术,理解并熟练掌握这些技巧对于前端开发者来说至关重要。通过正确使用这些方法,可以有效地实现页面间的数据流动和功能协同,提升用户...

    JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例

    在学习JavaScript基础时,变量作用域、传值与传址是核心概念,它们在编程过程中有着举足轻重的作用。本文将对这些概念进行简单介绍,并通过实例加深理解。 首先,关于变量作用域。在JavaScript中,变量的作用域决定...

    c++调用C# COM 参数是结构体数组

    ` 来调用 C# 的 TestReturnValueArray 方法,该方法返回一个结构体数组。 结构体数组的传递 在 C++ 中,我们可以使用指针来传递结构体数组。例如,在本例中,我们使用 `_CAPI_Point3d* rdd = (_CAPI_Point3d*)lon;...

    调用形参为二维数组的函数

    由于`process2DArray`的形参`arr`被声明为`int (*arr)[cols]`,它将接收一个指向数组首元素的指针,这与二维数组的行首地址相匹配。因此,即使`arr`实际上是一个指针数组,函数内部仍然可以正确地遍历和处理二维数组...

    c#调用VC编写的DLL 涉及到字符串 字符串数组用法

    在.NET框架下,C#作为常用的编程语言,有时需要与非托管代码,如用VC++编写的DLL进行交互。这通常涉及到平台调用(P/Invoke)技术,它允许C#代码调用C/C++库中的函数。本篇将详细讨论如何在C#中调用VC编写的DLL,并...

    jni 调用对象以及数组

    对于引用类型数组,如String[],可以使用`GetObjectArrayElement()`获取数组元素,再调用上面提到的对象操作方法。 4. **使用Java监听器:** 要在C/C++中触发Java事件,可以定义一个回调接口,如`OnClickListener`...

Global site tag (gtag.js) - Google Analytics