`
498320858
  • 浏览: 392286 次
  • 性别: 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`都指向同一个数组。如果修改`...

    传值调用与引用调用.cs

    传值调用与引用调用.cs

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

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

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

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

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

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

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

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

    第二章 程序设计语言基础知识.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数据库读取数据

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

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

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

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

    利用数组和调用函数添减数据

    # include void main() { void inset(int * t,int n); void sort(int tmp[],int n); void sub_word(int temp[], int n); int a[100]; int b,i,t; printf("请输入你要输入数的个数:"); ...}

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

    有两种主要的传参方式:传值(by value)和传址(by reference)。理解这两种方式的区别对于编写高效、可控的代码至关重要。 1. **传值**: 当函数参数通过值传递时,函数接收到的是原始变量的一个副本。任何在...

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

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

    js代码-函数调用的传值和传址

    `main.js`可能包含了各种函数调用示例,演示了如何通过传值和传址来处理数据。通常,开发者会使用这些方法来优化性能,避免不必要的数据复制,或者确保函数不会意外地修改外部状态。 `README.txt`文件可能是对`main...

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

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

    浅析C# 函数的传值与传址

    值类型的就是传值的那种,引用类型包括字符串类型,数组和对象,字符串类型特殊,主要是因为字符串实际上是一个字符char[]数组,它在修改的时候并不是直接修改,而是新开辟了一个存储空间也就是建立了一个新的字符串...

Global site tag (gtag.js) - Google Analytics