您的位置:

c语言数值传参,c语言的参数传递

本文目录一览:

C语言规定,调用一个函数时,实参变量和形参变量之间的数据传递方式是什么

函数只有两种传递方式:

1、值传递,又称单向传递,只能把实参数值传给形参 ,形参最后的结果不影响实参(形参改变大小 ,实参大小不变)。

2、址传递,通过指针,把实参的地址给形参,形参的大小可以影响实参。

扩展资料:

实参变量和形参变量之间的调用过程

1、函数的形参列于函数声明中,在函数定义的函数体内使用,在未出现函数调用时,形参不占内存中的存储单元。

2、将实参的值传递给形参,当函数被调用时,实参列在函数名后面的括号里,执行函数调用时,实参被传递给形参。

3、在执行函数期间,由于形参已经有值,可以利用其进行相关运算。

4、通过return语句将函数值带回到主调函数。

5、调用结束,形参单元被释放。实参单元仍保留并维持原值(值传递)。

参考资料来源:百度百科-实际参数

在C语言中,函数实参与形参之间的数据传递方式是( )传递方式。

函数实参与形参之间的数据传递方式是( 值传递)传递方式,在C语言中,数据传递方式有值传递和引用传递,值传递:传值,实际是把实参的值赋值给行参,相当于copy。

那么对行参的修改,不会影响实参的值 。引用传递: 实际是传值的一种特殊方式,只是他传递的是地址,不是普通的赋值,那么传地址以后,实参和行参都指向同一个对象,因此对形参的修改会影响到实参。

扩展资料

传值调用中,只使用了实参的值。传值调用机制里,形参是一个局部变量,其初始值为相应实参的值。在引用调用机制里,将实参的地址传递给形参,从表面上看是以实参变量取代形参,因此任何发生在形参上的改变实际上都发生在实参变量上。

引用传递是将变量的内存地址传递给方法,方法操作变量时会找到保存在该地址的变量,对其进行操作。会对原变量造成影响。可以将一个变量通过引用传递给函数,这样该函数就可以修改其参数的值。

参考资料:百度百科—引用传递

C语言传参问题

如果是诸如函数声明int fun(int b[]),这个是传的地址,如果fun内部有赋值操作,那么会改变数组b的元素的值

如果是执行语句fun(b[i]);那么传的就是b[i]这个值,执行完fun后,b[i]的值不会变

a是一个指向指针的指针,a里面的内容是另一个指针p的地址,那么*a就是p的地址,**a就是*p。

同理,b的内容是另一个指针q的地址,*b就是q的地址,**b就是*q

t = *a, 那么t的内容就是p的地址,

*a = *b, a里面的内容变成了q的地址,即*a是q的地址,**a就是*q

*b = t, b里面的内容变成了p的地址,即*b是p的地址,**b就是*p

这三句,将**a的值和**b的值互换了,是对指针的操作。

传值方式:向函数传递参数时,先复制一份参数,然后才将复制品传给参数。函数中所有对参数的操作,就只是在使用复制品。不会改变传递前的参数本身。

传址方式:将地址传送给函数,函数对该地址的内容操作,相当于对实参本身的操作。

C语言中的值传参和引用传参是指什么?

在C语言中其实没有引用传参,都是值传参。即传递的都是实参的副本。

如下示例,

//交换两个参数的值,值传参

void swap(int x, int y)

{

int temp = x;

x = y;

y = temp;

}

int a = 2, b =1;

swap(a,b); //a,b的值不会改变,因为改变的是实参a,b的副本。

另一个示例:

//所谓的“引用传参”,交换两个数值

void swap(int *x, int *y)

{

int temp = *x;

*x = *y;

*y = tem;

}

int a =2, b = 1;

swap(a, b);//a,b的值改变

其实这里引用传参,传递的也是参数的副本,只是这个副本是变量a,b的地址,所以你在函数swap中你并不能通过参数改变变量a,b的地址,因为它只是一个副本,是值传递。但你得到变量的地址,你就可以访问和改变变量的内容,所以在第二个swap函数中,你可以通过*x和*y来改变实参的值,从而可以达到交换变量a,b值的效果。但这并不是引用传递。只是有这样的说法。推荐你去秒秒学上看看相关的内容,我也是从那上面学来的。

C语言参数传值

1.实参是数组元素,则形参一般是指针,指针指向实参数组首地址,也就是将实参的地址传递给形参.形参地址存储的值发生变化时,实参的值也将发生变化.

2.形参是指针,实参是函数,传递给形参指针变量的值是实参函数的地址.实参和形参的地址指向完全相同,即函数的内存首地址.

3.函数的形参和实参都是数组,传递的是实参的值,而非实参地址,形参和实参是两个完全独立的数组,只是将实参的值赋给了形参.

C语言自定义函数怎么传参,一次性把数组的数据全部传入?

数组参数属于指针参数.

指针参数即时传址参数(或叫引用参数), 如果想在函数中修改参数的值, 这是唯一的途径.

如果把数组当作参数, 不管你愿意与否, 它就是指针, 指向第一个值的指针.

1. 数组参数就是指向第一个元素的指针: #include stdio.h

void getArr(int p[], int si);

int main(void)

{

int ns[] = {1,2,3,4,5};

getArr(ns, sizeof(ns)/sizeof(ns[0]));

getchar();

return 0;

}

void getArr(int p[], int si) {

int i;

for (i = 0; i si; i++) {

printf("%d\n", p[i]);

}

}

2. 干脆直接声明为指针: #include stdio.h

void getArr(int *p, int si);

int main(void)

{

int ns[] = {1,2,3,4,5};

getArr(ns, sizeof(ns)/sizeof(ns[0]));

getchar();

return 0;

}

void getArr(int *p, int si) {

int i;

for (i = 0; i si; i++) {

printf("%d\n", p[i]);

}

}

3. 即使你在形参中指定维数也不起作用: #include stdio.h

void getArr(int p[2], int si);

int main(void)

{

int ns[] = {1,2,3,4,5};

getArr(ns, sizeof(ns)/sizeof(ns[0]));

getchar();

return 0;

}

void getArr(int p[2], int si) {

int i;

for (i = 0; i si; i++) {

printf("%d\n", p[i]);

}

}

4. 既然是指针, 其值就有被修改的可能: #include stdio.h

void getArr(int p[], int si);

int main(void)

{

int ns[] = {1,2,3,4,5};

size_t i;

getArr(ns, sizeof(ns)/sizeof(ns[0]));

for (i = 0; i sizeof(ns)/sizeof(ns[0]); i++) {

printf("%d\n", *(ns+i));

}

getchar();

return 0;

}

void getArr(int p[], int si) {

int i;

for (i = 0; i si; i++) {

p[i]++;

}

}

5. 如果是字符数组, 它自己能判断数组尾界: #include stdio.h

void getArr(char p[]);

int main(void)

{

char ns[] = "ABCDEFG";

getArr(ns);

getchar();

return 0;

}

void getArr(char p[]) {

int i;

for (i = 0; p[i]; i++) {

printf("%c: %d\n", p[i], p[i]);

}

}