精华内容
下载资源
问答
  • 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语言函数作为函数参数

    万次阅读 多人点赞 2019-09-13 11:35:15
    c,c++中是可以向Python那样将函数作为函数参数的,具体实现方法如下

    C语言函数作为参数

    为了满足DRY思想,减少代码的重复性,考虑将函数作为参数传入另一函数中。C语言是可以将函数作为函数参数的。
    用到的方法是函数指针。
    首先需要明确的是, 在C语言中,函数名就是函数的首地址,所以将函数作为函数参数的思路是将函数地址传入,形参是一个指针类型的变量,形参的基类型为函数原型。
    参数原型为:
    ElemType(*FunctionName)(ElemType, ElemType, ......)
    其中:ElemType为声明(如int, float, double,struct等)
    以冒泡排序为例借助判断大小函数进行数组排序的具体实现方法如下:

    #include <stdio.h>
    
    #define YES 1
    #define NO 0
    
    ///*判断函数,进行元素大小判断,increase判断大小比较*/
    int compare(int a, int b, int increase)
    {
    	if (increase > 0) {
    		if (a > b) return YES;
    		else return NO;
    	}
    	else
    	{
    		if (a < b)  return YES;
    		else return NO;
    	}
    }
    /*冒泡排序进行数组排序*/
    void OrderArr(int arry[], int(*compare)(int, int, int), int length, int increase = 1)
    {
    	for (int i = 0; i < length - 1; i++)
    	{
    		for (int j = 0; j < length - i - 1; j++)
    		{
    			if (compare(*(arry + j), *(arry + j + 1), increase))
    			{
    				int temp = *(arry + j + 1);
    				*(arry + j + 1) = *(arry + j);
    				*(arry + j) = temp;
    			}
    		}
    	}
    }
    
    /*输出函数*/
    void Print(int a[], int length)
    {
    	for (int i = 0; i < length; i++)
    	{
    		printf("%d ", *(a + i));
    	}
    	printf("\n");
    }
    
    int main()
    {
    	int a[5] = { 1, 4, 2, 6, 3 };
    	//增序排列数组
    	OrderArr(a, compare, 5);
    	Print(a, 5);
    	//降序排列数组
    	OrderArr(a, compare, 5, -1);
    	Print(a, 5);
    }
    
    展开全文
  • 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
    形式参数和实际参数 前面已经介绍过,函数的参数分为形参和实参两种。在本节中,进一步介绍形参、实参的特点和两者的关系。形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。 实参出现在...
  • 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...
  • C语言函数无返回值 参数

    千次阅读 2021-03-24 10:29:54
    函数被调用时,才申请了该内存空间,才有了这个变量,同时这个空间内的数据被赋值成实际参数的值,函数调用把实际参数的值拷贝一份给形式参数。 何时释放了该空间: 函数执行结束后,该空间由内存管理单元自动回收...
  • C语言函数

    万次阅读 多人点赞 2019-08-03 19:54:19
    每个C程序都至少有一个函数,即主函数main(),如果程序的任务比较简单,全部的代码都写在main()函数中,但是,在实际开发中,程序的任务往往比较复杂,如果全部的代码都写在main()函数中,main()函数将非常庞大臃肿...
  • c语言函数参数处理顺序 下面我们来看2个案例,分析下c语言函数参数处理顺序。 第一个: #include "stdio.h" void fn(int a,int b,int c) { printf("%d,%d,%d", a, b, c); } void main() { int a = 3; ....
  • 实际上,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语言函数参数的入栈顺序如何?从右至左,我随口回答。为什么是从右至左呢?我终究没有给
  • 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 语言中形式参数和实际参数的宏定义分析 C 语言允许宏带有参数在宏定义中的参数称为形式参数在宏调用中的参数称为实际参 数这点和函数有些类似 对带参数的宏在调用中不仅要宏展开而且要用实参去代换形参 带参宏定义...
  • 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语言 函数

    千次阅读 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语言引入可变参数函数。典型的可变参数函数的...
  • C语言函数介绍

    千次阅读 多人点赞 2018-07-07 20:03:53
    C语言函数 作者:任尚益 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 133,382
精华内容 53,352
关键字:

c语言函数形式参数

c语言 订阅