外贸网

  • 首页
  • 请问c语言中形参为指针是为设么实参有时加&有时不加,求高手解答。 C语言的数据结构,为啥有的形参前加&而有的却不加&?这是为什...

    作者:媒体   更新日期:2024.05.19
    变量有两种类型,一种是直接存储我们通常意义上的数据,另一种是专门用来存储计算机中的内存地址(也叫对其他变量的引用,其他变量在内存中的地址,等等),后者称为指针变量。
    普通变量例如int a=3;则a的值是3,而&a的值是一个地址,和程序的运行状态有关。
    指针除了声明时前面带*外——特征为*号左侧有Int之类的说明符来修饰——,其他地方前面带上*就代表取对应变量的值(可以放心,指针变量不能进行乘法运算),不带*就代表对应变量在内存中的地址。
    如int *p=&a;接下来p就代表a的地址,*p才是a具体的值,可以把*和&当作互相抵消的一对。*p==*(&a)==a==3。
    至于加括号,有可能是碰到了运算符优先级的情况,比如结构体成员运算符样子和小数点相同,它就比*的优先级高,如果你想用*p,就必须用括号把它俩和右边隔开,像(*p).name这样。除此外还有函数指针,在声明时两对括号均不可省,如void (*p)();其他情况下比较复杂,可以参照字符指针跟字符数组的关系。
    再说指针形参,假设两个自定义函数: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一定是int类型的地址,指针b本身已经是地址了,它的值正好是一个int类型变量的地址
    c=func2(*b);//或者也可写成c=func2(a);如果你愿意把*和&看成互逆的两种运算
    }
    其实上面两条函数调用,实参和形参的结合效果跟通常的赋值运算很神似:
    int *p=b;//int *p=&a;如果你写的是c=func1(&a);
    int m=*b;//int m=a;如果你这一行写的是c=func2(a);

    1。参数副本的概念
    函数传参会为参数创建副本,比如经常看到的swap(int a,int b)
    并不能交换两个变量,具体可搜参数副本(手机打字费劲)
    如果实参取&就解决了这个问题,依然看搜到的结果
    2。如果不需要通过参数返回数值,咋写都行

    看看“引用”就知道了!
    *p (*p) p 要具体问题具体分析,要不要说的就太多了。
    *p更具定义的类型可以指向特定类型的存储单元,(*p)一般用于定义函数指针或者多维数组指针。

    *p取值,p指针,(*p)()函数指针,传参根据函数的要求来。要穿指针p ,指针的值*p

    C语言的数据结构,为啥有的形参前加&而有的却不加&?这是为什么?希望大神帮帮忙啊

    c++ 中, 形参前加& 表示 “引用”。
    c 语言没有引用的概念。 形参前不加 &。
    c 语言 函数调用用 时 填写 的 实参,可能出现前面有 &号,这个&表示求地址运算。
    当 形参 为指针时,实参需用指针 或 变量的地址。
    例如:
    void fun(int *a, int *b){....};
    void fun2(int a, int b){....};
    int x=3,y=4;
    函数调用:
    fun(&x, &y); // 这里,对应形参为指针的,要用 &x, &y,即 地址形式。
    而 fun2(x,y); // 用变量名
    你的例子里,实参 用 &L 或 L, 取决于形参类型。

    swap(&x, &y); /*将x和y的地址值(即&x和&y)作为实参传递给形参*/ void swap(int *a, int *b) /*a和b是形参,接收地址类型的值*/ { int *t = a; /*声明定义一个地址变量(称指针)t赋初值以地址变量a的值(&x)*/ a = b; /*现在地址变量a存的值等于&y*/ b = t; /*现在地址变量b存的值等于&x*/ } 注意区分理解地址变量(&指针)和取地址变量的值(*指针指向的值),就能理解一楼回答的。

    满意请采纳

    关于c语言 当实参是数组名 形参是指针变量时
    答:在C语言,数组无论作为参数还是返回值,都是以指针形式返回或者传递的。在数组中,数组名字代表的是数组第1个元素的地址。比如如下数组。int a[10] = {1,2,3,4,5,6};数组名a,实际上相当于&a[0]。所以,当实参是数组名,形参是指针变量时,只要保证数据类型一致即可传递。如下面的示例代码:i...

    计算机c语言 fun(int a[10]) {…} 中函数形参为什么说是指针类型
    答:C语言里面数组和指针关系密切:数组名就是一个指针,表示第一个元素的地址,所以可以直接把定义后的数组名赋值给同类型的指针变量,用做函数的参数时,数组和指针等效的,即fun(int *p)和fun(int a[])等效。

    c语言的形参可以设为指针型的如 int *a ,但还可以设为 int &a 想问...
    答:int *a 是用指针变量做形参.int &a 是用引用做形参.区别如下:用指针的话是间接方式访问传进来的地址对应的变量的内存空间.如果是用引用的话,当然c里没有引用的概念, 只c++引进的一个概念.引用是变量的别名 , 所以跟直接访问变量本身一样, 只是换个名字而已, 实质是对传进来的变量本身操作, 而...

    在C语言中,当形参和实参都为指针时,在函数中传递的是地址吗?
    答:是的,指针这玩意儿,就是专门和地址挂钩的!

    c语言指针是什么意思!
    答:指针其实是一个整形变量,与其它数据不同的是,它的作用是用来存储其它变量的地址。指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。

    C++,函数里形参是指针,在函数里改变指针所指向的地址时,主函数里实参地...
    答:不会 这种情况好比:函数里的形参是一般变量,在函数里面改变变量的值,不会改变主函数里实参的值 指针就是地址变量 在函数里改变地址变量的值时 不会改变主函数实参地址变量的值 只有在函数里改变指针所指向的变量的值时 主函数实参指针所指向的变量的值才会改变 楼主可以自己在电脑上实践一下 希望你...

    指针的形参为什么影响不了实参
    答:在C中,所有的形参在接受实参时都是拷贝,即是”值“传递,所以在函数中对”值“所做的任何操作都不会影响原来的变量。有人认为指针传递能“影响原来的值”,这不仅是误会,而且大错特错——其实在被调函数中对指针的任何操作都不会影响原来的指针值,只有对“指针指向的内容”操作,才会永久改变指针...

    free函数的形参是无类型指针(void *),而实参可以是别的类型的指针(比如...
    答:free(void *),意味着指针是可以指向任何的类型,即任何类型的指针都可以作为free函数的参数传入。比如:int *p=malloc(sizeof(int)*3); free(p);char *p=malloc(sizeof(char )*3); free(p);struct Test { int a;int b;} struct Test * test;test.a=100; test.b=200; free(test);...

    一个C语言编程的问题,实参为地址,形参为指针,望高手解答。
    答:swap(&x, &y); /*将x和y的地址值(即&x和&y)作为实参传递给形参*/ void swap(int *a, int *b) /*a和b是形参,接收地址类型的值*/ { int *t = a; /*声明定义一个地址变量(称指针)t赋初值以地址变量a的值(&x)*/ a = b; /*现在地址变量a存的值等于&y*/ b ...

    指针变量能只能作为函数的形参不可以作函数的实参对还是错
    答:。数组名就是数组的首地址,实参向形参传递数组名实际上就是传送数组的地址,形参得到该地址后也指向同一数组。这就好像同一件物品有两个彼此不同的名称一样。同样,指针变量的值也是地址,数组指针变量的值即为数组的首地址,当然也可以作为函数的参数使用。指针作为实参,指针作为形参:...