方法传参(JAVA与C的比较)

java代码:
public class
Test{ static int e; // 默认是0 static String f; //默认是null public static void main(String[] args) { int a = 0; char [] b = {'a','b','c'}; String c = "hello"; Person d = new Person(); new Test().TestParameter(a, b, c, d, e); System.out.println("a="+a); System.out.println("b="+b[0]+b[1]+b[2]); System.out.println("c="+c); System.out.println("d="+d.id+d.name); System.out.println(e); System.out.println(f); } public void TestParameter(int a, char[] b,String c, Person d,int e){//这里的 Person d 相当于c中的 Person *d a++; //a = a+1; 现在的a指向的不是刚开始传入的a的地址了,原来的a还是那个数 b[2] = 'e'; //地址没有变,操作的就是b本身 c="abc";//一赋值,就表示c重新指向新的地址,新地址的内容是"abc",原来的数据没变 d.id=3;//地址没变,数据会被修改 d.name = "tom"; e = 2; f = "ffff";
  //注意:如果参数出现被赋值的情况,说明现在的参数地址已经改变,之后的操作都是对新地址的操作,刚开始传入的数据并没有动。 } }

方法传参(JAVA与C的比较)

c代码:
#include <stdio.h> typedef struct Person { int id; char name[10]; }Person , *Per;
//形参是指针类型的,那么形参和实参都指向同一块数据域,形参和实参的地址是相同的,形参改变,实参也会改变
//形参是普通类型的,当实参传入时,形参操作的是实参复制出来的另一份数据域,形参和实参的地址不同,形参改变,实参不受影响
void func(Person p1, Person *p2, int a1, int *a2) { p1.id = 10; strcpy(p2->name,"jerry"); a1 = 12; *a2 = 23; }

//形参是地址类型的,形参改变,实参也会改变
void func02(Person &p){

}
void main(){ struct Person p1; struct Person p2; int a1 = 1; int a2 = 2; p1.id = 01; strcpy(p1.name,"tom01"); p2.id = 02; strcpy(p2.name,"tom02"); func(p1,&p2,a1,&a2);    func02(p); // 这里传入的是普通类型,如果p是指针类型的,需要*p这么传 printf(" a1=%d a2=%d p1.id=%d p2.name=%s ",a1,a2,p1.id,p2.name); }

方法传参(JAVA与C的比较)