外贸网

  • 首页
  • 在c语言中,指针作为函数参数,形参只能传递值,而不能传递地址,是怎么回事? 为什么在c语言中形参和实参之间传递的只能是值传递?

    作者:媒体   更新日期:2024.05.19
    C语言中,函数参数只能传值。与传值对应的是传引用,C语言不支持函数参数传引用,C++语言才支持。
    C++传引用函数:
    void foo(int& a) { a = 3; }
    假如a = 2,执行foo(a)后,a = 3。
    ---
    C语言可以模拟传引用,方法是通过指针来实现:
    void foo2(int* ap) { *ap = 3; }
    假如a = 2,执行foo2(&a)后,a = 3
    foo2(&a)调用本质上仍然是传值,只不过传递的是指针,指针即是地址,地址本质上是一个无符号整数。
    如果:
    void foo3(int b) { b = 3; }
    假如a = 2,执行foo3(a)后,a = 2。这是因为foo3(a)调用过程中,a值传给形参b,修改b的值与实参a无关。
    注意到,foo3(a)与上述foo(a)传引用的调用是形式一样的。
    既然C语言通过指针可以实现传引用调用,为什么C++还要引入引用这个特性呢?这是因为C++引入的很多新特性需借助引用来实现,比如,拷贝构造函数等等。

    建议上代码
    问题中说法本来就是错的
    形参指的是你声明或者定义用的那个参数,本来也不是传值的
    至于传值还是传地址,如果形参是指针p,那么传递过去的p值就是地址,同时也是自身的值,这个看具体使用情况
    所以一句话,show me your code

    传值和传地址本质都是传值,只不过有些值表示地址

    为什么在c语言中形参和实参之间传递的只能是值传递?

    其实c语言有两种形参和实参之间传值方式,一种是传值,一种是传这个值的地址,但实际上地址也是一个值,对应计算机存储空间上的编号,所以统称为传值。

    void sort(int &a,int &b)
    这个用法在c基础中不讲,一般在c++中才用到,说白了,就是传递一个地址而已
    不过你要记住,这样用时,实参和形参在一个内存地址中,在子函数中改变参数的值,会影响到主函数的值

    C语言指针作为函数参数问题
    答:首先要说明的是int *ptr,这时候ptr指向一个不明确的地址,在这种情况下getptr(ptr,10);这一句传一个地址给getptr里面的p指针,这时候p指针获得的是ptr指针的一个副本,确切的说是ptr指向的对象的内存地址,所以这种方式在函数里面可以用来传一个指针指向的数据,这个数据是引用,但是指针还是副本,就是p与...

    c语言函数的形参为指针变量时,对应的实参可以是数组名。怎么理解呀_百...
    答:举例:void f(int *p){ } int arr[]={1,2,3};因为函数f的形参是一个类型为int的指针变量,所以调用f时,可以将数组名arr作为实参传给形参p。即可以这样调用:f(arr);

    C语言指针变量的赋值和做函数的参数
    答:实际上的赋值语句是px=&x ;int * py ;py=&x ; //单独赋值,将py指向x*py=10 ; //这里的*,是引用指针中的数据操作符,*跟随的变量必须是指针类型变量,否则会出错! *py就是x,这里相当于x=10;2、指针变量作为函数的参数时,子函数可以通过指针引用实参地址中的数据,达到修改实参地址中...

    c语言中,函数的形参什么时候必须是指针
    答:情况1 需要读入的数据是比较大的数据,使用指针作为参数可以节省堆栈 比如 定义1个结构体 typedef struct test { char buffer1[10000];char buffer2[10000];//后面还有一大堆成员 }test_ts;void Func1(test_ts t1){ //函数体是对t1成员进行Read处理 } void Func2(test_ts *t1){ //函数体是...

    C语言规定,调用一个函数时,实参变量和形参变量之间的数据传递方式是什么...
    答:函数只有两种传递方式:1、值传递,又称单向传递,只能把实参数值传给形参 ,形参最后的结果不影响实参(形参改变大小 ,实参大小不变)。2、址传递,通过指针,把实参的地址给形参,形参的大小可以影响实参。

    C语言中文件指针能不能作为参数传递?
    答:1.指针完全可以作为函数的参数进行传递,其实在C中,数组作为参数传递,跟指针作为参数传递都很类似的,指针传的是该指针指向的地址,而数组参数则是将该数组的首地址传递过去。2.文件指针 在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作。定义...

    请问c语言中形参为指针是为设么实参有时加&有时不加,求高手解答。
    答:再说指针形参,假设两个自定义函数:int func1(int *p){……}//指向int类型的变量的指针做形参 int func2(int m){……}//int类型的变量做形参 void main(){ int a=0,*b,c;b=&a;c=func1(b);//或者你也可以写c=func1(&a);因为此时需要提供一个专门于int类型地址的实参,&a一定是...

    C语言指针作为函数参数,返回值为0
    答:那你应该用指针的指针才行,然后函数返回指针。double *a(double **p){ *p=... //修改指针所指向的地址 ... return *p; //返回指针p指向的地址}int main(){ double *p=... //初始化指针p double *q; //用于接收改变的指针 ... q=a(&p); //将指针p的...

    ...并用结构变量或其指针作函数参数计算三角形面积
    答:include <stdio.h>#include<math.h>struct tt{ float a; float b; float c;}tt1;float fun(struct tt tt1){ float s,p; p=(tt1.a+tt1.b+tt1.c)/2; s=sqrt(p*(p-tt1.a)*(p-tt1.b)*(p-tt1.c)); return s;}bool isTriangle(struct tt tt2){ ...

    C语言里 用指针或者数组名做函数参数时,在被调用的函数体里 为什么有...
    答:第一个程序:a是指向结构体s[0]的指针,a[0]...a[i]就是第0-i个结构体,a[i].s表是结构体中s域;a[i].s; (*(a+i)).s; (a+i)->s 3个的值是相等的;意思就是当定义一个结构体指针STREC *p_str后,把地址p_str起始的内容结构体化,同时(p_str+1)也是一个指向结构体...