关于C语言和Javascript函数参数的传递

在C语言当中

在C语言当中,函数参数传递大体上可分为三种

第一种:传递的是简单变量或者是数组元素

#include <stdio.h>
#include <stdlib.h>
int change(int one,int another);
int main()
{
    int a,b;
    a=1;
    b=2;
    change(a,b);
    printf("%d",a);
}

int change(int one,int another){
    int temp;
    temp=one;
    one=another;
    another=temp;
    printf("%d\n",one);
}
可以发现,a和b的值并没有交换。在 C 语言中,所有函数参数都是“通过值”传递的。也就是说,传递给被调用函数的参数值存放在临时变量中,而不是存放在原来的变量中,被调用函数不能直接修改主调函数中变量的值,而只能修改其私有的临时副本的值。因此上面的a和b并没有交换。


第二种:传递的是指针变量或数组名

1.指针变量
#include <stdio.h>
#include <stdlib.h>
int change(int *one,int *another);
int main()
{
    int a,b;
    a=1;
    b=2;
    change(&a,&b);
    printf("%d",a);
}

int change(int *one,int *another){
    int temp;
    temp= *one;
    *one= *another;
    *another=temp;
    printf("%d\n",*one);
}
指针保存着变量在内存中的地址,因为函数是以值的形式传递的,因此传入函数中的是这个地址的一个“拷贝”。由于两个指针指向同一内存空间,因此函数内对内存空间,也就是变量的修改,会反应的函数外面,所以这个swap函数成功实现了交换功能。

2.传递的是数组名
void  f1( char  *s) {  printf ( "%s\n" , s);}
void  f2( char  sa[]) {  printf ( "%s\n" , sa);}
 
int  main()
     char  rsa[] = "world hello" ;
     f1(rsa);
     f2(rsa);
     return  0;
}
在C语言中,当把数组名传入到函数中时,实际上传入的是一个指针变量,这个指针指向数组中的第一个项,而“数组名+1”则指向数组中的第二个项,以此类推。并且在声明时,用“
void  f1( char  *s) {  printf ( "%s\n" , s);}
void  f2( char  sa[]) {  printf ( "%s\n" , sa);}
”方法声明都是可以的。

第三种:引用作为函数参数
引用是c++的特性,c语言本身不支持直接传入引用



在Javascript中

在javascript中,没有引用传递,只有值传递。也就是说,无论是基本类型,还是引用类型,传入函数中的都是外部函数的值的拷贝。

例如基本类型:
function addTen(num){
	num + =10;
	return num;
}
var count = 20;
var result = addTen(count);
alert(count);  //20
alert(result);//30
从这点可以看出,传入参数中的值和外部的值是没有关系的

引用类型:
function setName(obj){
	obj.name = "a";
}
var person = new Object();
setName(person);
alert(person.name);  //a
有些人可能会疑惑,为什么函数内的改变会影响函数外的值,因此误以为引用类型也是按引用传递的,在看一个例子
function setName(obj){
	obj.name = "a";
	obj = new Object();
	obj.name="b";
}
var person = new Object();
setName(person);
alert(person.name); //"a"
如果是按引用传递的话,那么“person.name”就会是"b"。所以从这里看出引用类型也是按值传递的。实际上对象等引用类型是保存在堆内存空间中的,而我们不能直接读写堆内存,因此需要间接的更改。可以把对象名看成 指针,它指向堆内存空间中实际的对象,通过它就可以操作对象了。当传入函数中时,是将这个指针拷贝了一份,传入函数中的,由于函数内部和外部都指向的是相同的对象,所以更改内部会反应在外部,但当改变内部指针的时候,例如让它指向其他对象时,外部指针还是不变的。所以说,在javascript中,函数参数的传入都是按值传递的。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值