李长凡 发表于 2019-4-18 13:38:54

形参是指针变量吗

形参是指针变量吗他们两个有什么关系

jackz007 发表于 2019-4-18 14:11:00

本帖最后由 jackz007 于 2019-4-18 14:13 编辑

      请考察以下代码:
#include <stdio.h>

void fun1(int * p)
{
      * p += 8                            ;
}

void fun2(int p)
{
      p += 20                           ;
}

int main(void)
{
      int a                               ;
      a = 3                               ;
      printf("oringinal a = %d\n" , a)    ;
      fun1(& a)                           ;
      printf("after fun1() a = %d\n" , a) ;
      fun2(a)                           ;
      printf("after fun2() a = %d\n" , a) ;
}

      形参是指针变量的,代表参数是可以读写的,也就是说,在函数内对参数值的修改会反馈给调用者(如:fun1());如果形参是实体变量,那么这个参数就是只读的,在函数内对参数值的任何修改不会反馈给调用者(如:fun2()),这就是二者的区别。

Croper 发表于 2019-4-18 14:58:56

形参本身是按值传递的,修改形参不会导致实参的变化

wp231957 发表于 2019-4-18 15:27:36

请看两个经典函数的案例:

#include<stdio.h>

int add(int a,int b)
{
        return a+b;
}

void swap(int a,int b)
{
        int tmp;
        tmp=a;
        a=b;
        b=tmp;
}

int main()
{
        int ia=10;
        int ib=30;
        printf("a+b=%d\n",add(ia,ib));
        swap(ia,ib);
        printf("交换之后的a=%db=%d\n",ia,ib);
        /*
        a+b=40    这个等于40 米有问题
    交换之后的a=10b=30咦,这个没有实现交换呀 ,好吧,交换函数肯定写错了呀
    请按任意键继续. . .
    */
        return 0;
}

wwhywhy 发表于 2019-4-20 11:19:48

函数定义的时候的参数叫形参。使用的时候传递的变量或值是实参。
形参有两种情况,一种是值拷贝,另一种是指针或者地址。拷贝的时候,函数中的操作是不能影响实参本身的值的。而指针或者地址方式就能够改变该实参。
页: [1]
查看完整版本: 形参是指针变量吗