这篇文章,我专门测试了一下C、Java、PHP三种编程语言中对于函数(方法)参数传递的问题

一、C/C++篇

首先说明一下,这里仅在C语言下测试,C++类似,只不过在C++中多了一个传引用(&),其性质还是指针,传递过程中可以看作是使用别名。
看代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
//
// main.c
// TestOfVlaue
//
// Created by anthony on 16/4/16.
// Copyright © 2016年 Anthony. All rights reserved.
//

#include <stdio.h>
//C语言测试
void prt1(int v) {
printf("方法内执行后的结果:%d\n",v);
}
void prt2(int v[],short int len) {
for (int i=0; i<len; i++) {
printf("a[%d]:%d\n",i,v[i]);
}
}
void ch1(int v) { //按值传递
++v;
prt1(v);
}
void ch2(int *v) { //按地址(指针)传递
++(*v);
prt1(*v);
}
//void ch3(int &v) { //引用传递 C里面木有&(引用)C++中可用,底层还是指针
// ++v;
// prt1(*v);
//}
void ch4(int v[],short int len) { //改变数组的值
for (int i=0; i<len; i++) {
v[i]++;
}
}
void test1(int v) { //测试整型变量
printf("测试单个值:类型:int,值为:%d\n",v);
ch1(v);
printf("执行ch1()的结果:%d\n",v);
ch2(&v);
printf("执行ch2()的结果:%d\n\n",v);
}
void test2(int v[],short int len) { //测试整型数组
printf("测试数组:类型:int,值为:\n");
prt2(v, len);
ch4(v,len);
printf("方法内执行后的结果:\n");
prt2(v, len);
printf("\n");
}
int main(int argc, const char * argv[]) {
int a = 10;
int b[] = {1,2,3};
test1(a); //测试变量a++
test2(b, 3); //测试数组b各元素++
test1(b[0]); //测试数组b[0]++
return 0;
}

运行结果:

阅读剩下更多

默认配图