本文目录一览:
- 1、C语言规定,调用一个函数时,实参变量和形参变量之间的数据传递方式是什么
- 2、在C语言中,函数实参与形参之间的数据传递方式是( )传递方式。
- 3、C语言传参问题
- 4、C语言中的值传参和引用传参是指什么?
- 5、C语言参数传值
- 6、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]);
}
}