精华内容
下载资源
问答
  • C语言函数参数

    千次阅读 2019-03-21 23:07:27
    一、函数参数可以是变量、变量指针和变量引用: void funcA(int8_t x) { x=x+1; } 代码说明:该函数参数属于值传递,在调用该函数时,仅仅只是把实参的值拷贝了一份赋值给了形参x,之后的任何操作都不会影响到...
    一、函数的参数可以是变量、变量指针和变量引用:
    
    void funcA(int8_t x)
    {
         x=x+1;
    }
    代码说明:该函数的参数属于值传递,在调用该函数时,仅仅只是把实参的值拷贝了一份赋值给了形参x,之后的任何操作都不会影响到实参的值。
    
    int8_t funcB(int8_t* x)
    {
    
         (*x)+=1;
         return (*x);
    }
    代码说明:该函数的参数属于指针传递,在调用该函数的时候,虽然也是把实参的值拷贝一份给了形参x,但是形参x是个地址,它与实参一样,共同指向了同一片区域,因此如果之后通过*来操作x,必定会影响到该指针指向的区域。
    
    int8_t funcC(int8_t &x)
    {
    
         x=x+1;
         return x;
    }
    代码说明:该函数的参数属于引用传递,在调用该函数的时候,这个形式参数其实是实际参数的另外一个名字而已,言外之意,两者是同一个对象,所以操作x就意味着操作了实际参数。
    
    int main(void)
    
    {
    
        int8_t score=5;
    
        funcA(score);
    
        printf("%d\n",score);
    
        score=funcB(&score);
    
        printf("%d\n",score);
    
        score=funcC(score);
    
        printf("%d\n",score);
    
    }
    
    打印结果是:
    5
    6
    7
    
    【总结】值传递为单向传递,利用值传递可以实现函数对某个状态的监视;指针传递和引用传递为双向传递,可以利用指针传递和引用传递来实现函数之间的通信。
    
    二、函数的参数可以是函数指针,当函数的参数时函数指针的时候,顾名思义,这个函数是想通过函数指针来调用别的函数。
    既然变量指针作为函数参数,函数就可以操作该指针指向的变量,那么同理,函数指针作为函数参数,函数就可以操作该指针指向的函数,毕竟无论是变量指针还是函数指针,本质上都是指向了内存的一个区域,无非是变量区域小些,函数区域大一些。下面举例说明:
    //先定义一个函数指针
    typedef void(*FP)(int x,int y);
    //然后设计一个以
    void func(FP fp,int n,int m )
    {
        int sum;    
        sum=fp(n,m)>6?fp(n,m):6;
    }
    //设计与函数指针FP匹配的函数原型
    void Add(int x,int y)
    {
       return (x+y);
    }
    //在主函数中调用函数func
    int main(void)
    {
       func(Add,1,3);
    }
    【总结】
    1、一般情况下,调用函数的形式是:函数名(参数1,参数2,,,,),函数名其实是一个指针,一个指向该函数所存放的这个区域的指针,因此既然上面fp是函数指针,所以func(Add,1,3);就等同于Add(1,3);
    2、理论上函数func可以以Add(1,3)的形式光明正大的调用它,但是却选择了以指针的形式调用,这是有妙用的。
    3、要想声明一个函数指针,只需要把函数名用*加指针名替换,然后最前面加上typedef即可。
    
    好了,很晚了,先写到这里为止。

     

    展开全文
  • C语言函数参数及传递方式

    万次阅读 2016-05-08 10:37:40
    1.形式参数和实际参数 1.1形式参数 形参出现在被调函数当中,在整个函数体内都可以使用。形参在定义时编译系统并不分配存储空间,只有在调用该函数时才分配内存单元。调用结束内存单元被释放,故形参只有在函数调用...

    1.形式参数和实际参数

    1.1形式参数

    形参出现在被调函数当中,在整个函数体内都可以使用。形参在定义时编译系统并不分配存储空间,只有在调用该函数时才分配内存单元。调用结束内存单元被释放,故形参只有在函数调用时有效,调用结束时不能再使用。

    1.2实际参数

    实参出现在主调函数当中,当函数调用时,朱调函数把实参的值传送给被调函数的形参,从而实现函数间的数据传递。传递方式有两种:值传递和地址传递方式。

    2.变量作为函数参数

    当形参定义为变量时,实参可以是常量、变量和表达式,这种函数间的参数传递为值传递方式。值传递的特点是参数的“单向传递”;
    int swap(int a,int b)
    {
       int temp;
       temp=a;
       a=b;
       b=temp;
       return 0;
    }  
    int main (void){
    		int a=3,b=4;
    		swap(a,b);
    	}
    由于是值传递,单向传递,并不会改变a,b的值。

    3.数组作为函数参数

    3.1数组元素作为函数参数

    数组元素又称为下标变量,它具有普通变量的一切性质,因此数组元素作为函数的实参进行数据传递是与普通变量没有任何区别,也是值传递
    int swap(int a,int b)
    {
       int temp;
       temp=a;
       a=b;
       b=temp;
       return 0;
    }  
    int main (void){
    		int a[]={3,4};
    		swap(a[0],b[0]);
    	}

    同样是值传递并不会改变a[0]的值。

    3.2一维数组名作为函数参数

    数组名是一个地址,是数组的首地址,因此用数组名作为函数的参数进行数据传递时,执行的是地址传递方式。所谓地址传递,顾名思义实参传递的不是数据本身,而是数据存在的地址。函数调用时,把数组名即数组的首地址作为实参传递给形参(必须是可接受地址的数组名或者指针变量),形参数组名取得首地址后就有了实在的数组,这时实质上实参和形参是同一个数组,指向同一段存储空间,实参的改变就是对形参的改变,所以传址方式可看成是数据进行了“双向传递”。

    3.3数组指针,即数组元素的地址作为函数参数

    由于数组元素的地址的本质仍然为地址,所以属于地址传递方式。
    int swap(int *a,int *b)
    {
       int temp;
       temp=*a;
       *a=*b;
       *b=temp;
       return 0;
    }  
    int main (void){
    		int arr[] = {1,2};
    		int *a = &arr[0];
    	    	int *b = &arr[1];
    			swap(a,b);
    	}
    

    重点:
    • 数组元素(下标变量)作为函数的参数进行的数据传递是值传递方式,数组名(数组首地址)、数组元素的地址(&arr[0])作为函数参数进行的数据传递是地址传递方式。
    • 实参为数组名是,形参接收时可以有三种形式:带下标的数组名(arr[0])。不带下标的数组名(arr)、可接收地址值的指针变量名(*a)。由于是参数组和形参数组都指向同一段内存单元,故它们操作的是同一批数据,所以形参的改变就是改变了实参中的数据。

    展开全文
  • C语言函数返回值与参数传递

    千次阅读 2019-10-26 11:57:43
    C语言函数返回值与参数传递 一:参数传递 C语言的函数中必不可少的就是参数传递,可以采用传值和传指针两种方式。 1.传值的形式:只是将参数值的拷贝传给函数,并非参数本体如: int test(int x,int y) { x=2*y; ...

    C语言函数返回值与参数传递

    一:参数传递

    C语言的函数中必不可少的就是参数传递,可以采用传值和传指针两种方式。
    1.传值的形式:只是将参数值的拷贝传给函数,并非参数本体如:

    int test(int x,int y)
    {
        x=2*y;
        return x;
    }
    int main(void)
    { 
        int a=0,b=5;
        printf("%d,%d\n\r",test(a,b),a);
    	return 0;
    }
    

    运行结果为:
    10,0
    即传值方式只可以将实参传递给函数,不可以改变实参本身。

    2.传指针形式:直接传给函数的是变量的地址。
    如:

    int a(int b,int *c)
    {
        int i=0;
        for(i=0;i<4;i++)
            c[i]=b*i;
        return 0;
        
    }
    int main(void)
    { 
        int b=2,c[4],i;
        a(b,c);
        for(i=0;i<4;i++)
    	    printf("Data is -> %d\n\r",c[i]);
    	return 0;
    }
    

    运行结果为:
    Data is -> 0
    Data is -> 2
    Data is -> 4
    Data is -> 6

    由于被调函数在参数指针的作用域之内,此时可以直接改变变量的本体。

    二:返回值

    函数除了参数传递还有返回值,既可以返回变量值也可以返回地址。
    1.返回变量
    如:

    int a(int b)
    {
        int i=5;
        return 5*b;
    }
    int main(void)
    { 
        int b=2;
    	printf("Data is -> %d\n\r",a(b));
    	return 0;
    }
    

    运行结果

    Data is -> 10

    2.返回地址

    int *test(int b)
    {
        int i=0,buf[4];
        for(i=0;i<4;i++)
            buf[i]=b*i;
        return buf;
        
    }
    int main(void)
    { 
        int  b=2;
        int *p;
        int  i=0;
        p=test(b);
        for(i=0;i<4;i++)
        	printf("%d ,%d \n\r",p[i],test(b));
    	return 0;
    }
    

    运行结果
    0 ,1084896256
    2 ,1084896256
    4 ,1084896256
    6 ,1084896256

    另外不能返回局部变量地址。

    int *buf()
    {
    	 int dad;
    	 double buf[3][2];
    	 dad=sizeof(buf);
      	 return &dad;//error:由于dad是局部变量,函数结束后释放。
    }
    
    展开全文
  • C语言函数参数和返回值

    千次阅读 2014-04-10 17:44:18
    形式参数和实际参数 前面已经介绍过,函数的参数分为形参和实参两种。在本节中,进一步介绍形参、实参的特点和两者的关系。形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。 实参出现在...

    形式参数和实际参数

    前面已经介绍过,函数的参数分为形参和实参两种。在本节中,进一步介绍形参、实参的特点和两者的关系。形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。

    实参出现在主调函数中,进入被调函数后,实参变量也不能使用。形参和实参的功能是作数据传送。发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。

    函数的形参和实参具有以下特点:
    • 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。
    • 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。
    • 实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配”的错误。

    函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。


    【例8-2】可以说明这个问题。
    1. main(){
    2. int n;
    3. printf("input number\n");
    4. scanf("%d",&n);
    5. s(n);
    6. printf("n=%d\n",n);
    7. }
    8. int s(int n){
    9. int i;
    10. for(i=n-1;i>=1;i--)
    11. n=n+i;
    12. printf("n=%d\n",n);
    13. }
    本程序中定义了一个函数s,该函数的功能是求∑ni的值。在主函数中输入n值,并作为实参,在调用时传送给s 函数的形参量n( 注意,本例的形参变量和实参变量的标识符都为n,但这是两个不同的量,各自的作用域不同)。在主函数中用printf 语句输出一次n值,这个n值是实参n的值。在函数s中也用printf 语句输出了一次n值,这个n值是形参最后取得的n值0。从运行情况看,输入n值为100。即实参n的值为100。把此值传给函数s时,形参n的初值也为100,在执行函数过程中,形参n的值变为5050。返回主函数之后,输出实参n的值仍为100。可见实参的值不随形参的变化而变化。

    函数的返回值

    函数的值(或称函数返回值)是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的值。如调用正弦函数取得正弦值,调用【例8-1】的max函数取得的最大数等。对函数的值有以下一些说明:

    1) 函数的值只能通过return语句返回主调函数。return语句的一般形式为:
        return 表达式;
    或者为:
        return (表达式);
    该语句的功能是计算表达式的值,并返回给主调函数。在函数中允许有多个return语句,但每次调用只能有一个return 语句被执行,因此只能返回一个函数值。

    2) 函数值的类型和函数定义中函数的类型应保持一致。如果两者不一致,则以函数类型为准,自动进行类型转换。

    3) 如函数值为整型,在函数定义时可以省去类型说明。

    4) 不返回函数值的函数,可以明确定义为“空类型”,类型说明符为“void”。如【例8-2】中函数s并不向主函数返函数值,因此可定义为:
    1. void s(int n){
    2. /* …… */
    3. }
    一旦函数被定义为空类型后,就不能在主调函数中使用被调函数的函数值了。例如,在定义s为空类型后,在主函数中写下述语句 就是错误的。
    展开全文
  • c语言函数中调用的参数太多 很少参数无法使用C语言 (Too few arguments to function in C language) This error occurs when numbers of actual and formal arguments are different in the program. 当程序中实际...
  • C语言 函数参数和调用函数

    千次阅读 2019-04-14 08:39:07
    这些变量称为函数形式参数形式参数在进入函数时被创建,退出函数时被销毁。 当调用函数时,有两种向函数传递参数的方式: 传值调用 默认情况下,C 语言使用传值调用方法来传递参数。一般来说,这意味着函数内...
  • 若用函数调用的方式来实现交换,沿用上述思路初步实现如下: #include&lt;stdio.h&gt; void exchange(int,int); void exchange(int one,int another){ int t; t = one; one = another; anoth...
  • 函数被调用时,才申请了该内存空间,才有了这个变量,同时这个空间内的数据被赋值成实际参数的值,函数调用把实际参数的值拷贝一份给形式参数。 何时释放了该空间: 函数执行结束后,该空间由内存管理单元自动回收...
  • 实际上,main函数可以带参数,这个参数可以认为是 main函数形式参数C语言规定main函数的参数只能有两个, 习惯上这两个参数写为argc和argv。因此,main函数函数头可写为: main (argc,argv)C语言还规定argc...
  • C语言main函数参数

    千次阅读 2014-11-12 20:03:42
    实际上,main函数可以带参数,这个参数可以认为是main函数形式参数C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。因此,main函数函数头可写为:  main (argc,argv) C语言还规定argc...
  • C语言函数

    千次阅读 多人点赞 2019-11-13 20:02:10
    c语言函数 1.函数: C语言中的函数是独立地实现了某项功能。一个程序由多个函数组成,可以理解为「一个程序由多个小的功能叠加而成」。 C语言自带的函数称为库函数(Library Function)。库(Library)是编程中的...
  • C语言函数参数传递的三种方式

    万次阅读 多人点赞 2017-07-22 21:09:40
    C语言函数参数传递的三种方式(1)传值,就是把你的变量的值传递给函数形式参数,实际就是用变量的值来新生成一个形式参数,因而在函数里对形参的改变不会影响到函数外的变量的值。(2)传址,就是传变量的地址...
  • C语言函数参数传递原理

    千次阅读 2014-07-29 10:34:19
    C语言参数的传递方式一般存在两种方式:一种是通过栈的形式传递,另一种是通过寄存器的方式传递的。这次,我们只是详细描述一下第一种参数传递方式,另外一种方式在这里不做详细介绍。 首先,我们看一下,下面一个...
  • C语言函数之输入参数

    千次阅读 2018-10-17 15:47:05
    输入参数:承上启下的作用 调用者:函数名(要传递的数据) //实参 被调者:函数的具体实现 函数的返回值 函数名(接收的数据) //形参 { 。。。。 } 实参 传递给 形参 传递形式:逐一拷贝 值传递...
  • C语言函数参数列表里的“...”

    千次阅读 2019-05-08 11:46:34
    以Linux “man 手册”里的printf函数声明为例,谈谈我对C语言函数的可变参数的一点理解。 printf的函数声明如下:int printf(const char *format, …); 通常情况下,以这种形式声明的函数参数列表至少需要一个普通的...
  • C语言函数参数的传递详解

    千次阅读 多人点赞 2019-03-31 15:04:54
    void Exchg1(int x, int y) /* 定义中的x,y变量被称为Exchg1函数形式参数 */ { int tmp; tmp = x; x = y; y = tmp; printf(“x = %d, y = %d.\n”, x, y); } 问:你认为这个函数是在做什么呀? 答:好像...
  • 值传递,就是把你的变量的值传递给函数形式参数,实际就是用变量的值来新生成一个形式参数,因而在函数里对形参的改变不会影响到函数外的变量的值 引用传递,实际是通过指针来实现的,能达到使用的效果如传址,...
  • C语言函数参数传递的分析

    万次阅读 2013-12-29 20:16:31
    值传递,即按值传递参数,按值传递参数时,是将实参变量的值复制一个到临时存储单元中,如果在调用过程中改变了形参的值,不会影响实参变量本身,即实参变量保持调用前的值不变。 1、形参只能是变量,实参可以是常量...
  • C语言函数参数的为空和用void标注他们的效果一样吗?#include <stdio.h> 2 //int add(); 3 int add(void); 4 int main(void) 5 { 6 int i; 7 i = add(5 ,6); 8 9 printf("%d\n", i);10 retur...
  • C语言 函数

    千次阅读 2017-08-24 09:34:37
    结构化编程标准 1)程序控制流尽可能简单 2)应该自顶向下地设计程序结构 自顶向下设计(top-down design),也称逐步细化(stepwise refinement),把一个问题分解为几个小问题的组成. ...C语言函数语法 type function...
  • C语言函数参数调用顺序

    千次阅读 2011-10-26 21:48:12
    浩然君前几天发过一个小文件:关于函数参数的调用顺序的 int arr[] = {6,7,8,9,10}; int *ptr = arr; *(ptr++) += 123; printf(“ %d %d ”, *ptr, *(++ptr));   输出:8 8 函数参数入栈的顺序,...
  • 函数参数入栈顺序的确是从右至左的。可到底为什么呢?查了一直些文献得知,参数入栈顺序是和具体编译器实现相关的。比如,Pascal语言中参数就是从左到右入栈的,有些语言中还可以通过修饰符进行指定,如Visual C++....
  • linux下C语言main函数参数解析

    千次阅读 2016-06-16 10:05:53
    1. linux下常见的main函数有两种形式: int main(int argc, char **argv) int main(int argc, char * argv[]) 2. 参数介绍 第一个参数 argc:命令行中所有参数的个数(当然包括我们的程序名) 第二个参数 argv...
  • C语言中不定参数函数

    2018-05-06 16:25:43
    在我们平常调用函数的时候,会进行传参,调用的函数也会有参数去接收,数量和类型都是对应的。而不定参数函数是指对一个函数传参,参数的个数可以不确定。接下来,我就简单的叙述一下不定参数函数的原理及应用。  ...
  • 大家都知道,c语言一般的参数都是传值调用的,但有时候也有例外,下面就分析一下什么时候传值调用,什么时候传址调用。 传值调用 标量参数都是传值调用,不会对标量产生任何影响 #include void add_one(int value)...
  • C语言函数介绍

    千次阅读 多人点赞 2018-07-07 20:03:53
    C语言函数 作者:任尚益 ...
  • 文章目录函数作为参数函数作为参数的使用 函数作为参数 函数作为参数的时候,需要声明函数的结构 一般的形式为: func(T (*func)(V args)) 使用的时候,直接使用对应参数类型的函数名即可 函数的名字就是指向内存...
  • c语言 函数调用中实际参数为赋值表达式情况 例 #include<stdio.h> void zm_f(int); int main(void) { int a; a=2; printf(“a=%d\n”,a); zm_f(++a==3?8:1);/或者是将++a与其他值比较/ printf(“now a=%d\n”,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 131,987
精华内容 52,794
关键字:

c语言函数的形式参数

c语言 订阅