广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言函数参数怎么使用
  • 317
分享到

C语言函数参数怎么使用

2023-06-30 04:06:21 317人浏览 薄情痞子
摘要

本篇内容主要讲解“C语言函数参数怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言函数参数怎么使用”吧!一、函数参数函数参数在本质上与局部变量相同在栈上分配空间函数参数的初始值是函数调

本篇内容主要讲解“C语言函数参数怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言函数参数怎么使用”吧!

一、函数参数

  • 函数参数在本质上与局部变量相同在栈上分配空间

  • 函数参数的初始值是函数调用时的实参值

  • 函数参数的求值顺序依赖于编译器的实现

C语言函数参数怎么使用

        下面看一个函数参数的求值顺序的示例:

#include <stdio.h> int func(int i, int j){    printf("i = %d, j = %d\n", i, j);        return 0;} int main(){    int k = 1;        func(k++, k++);        printf("%d\n", k);        return 0;}

         输出结果如下:

C语言函数参数怎么使用

         这个示例说明函数参数的求值顺序依赖于编译器的实现。

二、程序的顺序点

  • 程序中存在一定的顺序点

  • 顺序点指的是执行过程中修改变量值的最晚时刻

  • 在程序到达顺序点的时候,之前所做的&mdash;切操作必须完成

  • 每个完整表达式结束时,即分号处

  • &&,||,?:,以及逗号表达式的每个参数计算之后

  • 函数调用时所有实参求值完成后(进入函数体之前)

        下面看一个程序中的顺序点示例:

#include <stdio.h> int main(){    int k = 2;    int a = 1;        k = k++ + k++;        printf("k = %d\n", k);        if( a-- && a )    {        printf("a = %d\n", a);    }        return 0;}

        输出结果如下:

C语言函数参数怎么使用

        a-- && a ,对于 && 运算符,每个操作数都是一个顺序点。当程序从左往后执行时,a-- 对内存的修改必须立即完成,所以 a 就变成了 0。

          为什么会输出 6 呢?下面在 VS2012 里面运行代码,进行反汇编操作:

C语言函数参数怎么使用

         这段汇编代码简单的来说,就是先进行 + 操作,k = 2 + 2 = 4,然后进行两次 ++ 操作,所以最终结果就是 6。

三、小结-上

  • 函数的参数在栈上分配空间

  • 函数的实参并没有固定的计算次序

  • 顺序点是 C 语言中变量修改的最晚时机

四、调用约定

        函数参数的计算次序是依赖编译器实现的,那么函数参数的入栈次序是如何确定的呢?

当函数调用发生时

  • 参数会传递给被调用的函数

  • 而返回值会被返回给函数调用者

调用约定描述参数如何传递到栈中以及栈的维护方式

  • 参数传递顺序

  • 调用栈清理

调用约定是预定义的可理解为调用协议

调用约定通常用于库调用和库开发的时候

  • 从右到左依次入栈:_stdcall,_cdecl,_thiscall

  • 从左到右依次入栈:_pascal,_fastcall

C语言函数参数怎么使用

五、可变参数

        计算平均值时,我们一般可以编写成这样:

#include <stdio.h> float average(int array[], int size){    int i = 0;    float avr = 0;        for(i=0; i<size; i++)    {        avr += array[i];    }        return avr / size;} int main(){    int array[] = {1, 2, 3, 4, 5};        printf("%f\n", average(array, 5));        return 0;}

        输出结果如下:

C语言函数参数怎么使用

C语言中可以定义参数可变的函数

参数可变函数的实现依赖于 stdarg.h 头文件

  • va_list  --  参数集合

  • va_arg --  取具体参数值

  • va_start  --  标识参数访问的开始

  • va_end  --  标识参数访问的结束

        下面看一个求可变参数平均值的代码:

#include <stdio.h>#include <stdarg.h> float average(int n, ...){    va_list args;    int i = 0;    float sum = 0;        va_start(args, n);        for(i=0; i<n; i++)    {        sum += va_arg(args, int);    }        va_end(args);        return sum / n;} int main(){    printf("%f\n", average(5, 1, 2, 3, 4, 5));    printf("%f\n", average(4, 1, 2, 3, 4));        return 0;}

        输出结果如下:

C语言函数参数怎么使用

六、可变参数的限制

  • 可变参数必须从头到尾按照顺序逐个访问

  • 参数列表中至少要存在一个确定的命名参数

  • 可变参数函数无法确定实际存在的参数的数量

  • 可变参数函数无法确定参数的实际类型

        注意:va_arg 中如果指定了错误的类型,那么结果是不可预测的。

到此,相信大家对“C语言函数参数怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: C语言函数参数怎么使用

本文链接: https://www.lsjlt.com/news/327405.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言函数参数怎么使用
    本篇内容主要讲解“C语言函数参数怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言函数参数怎么使用”吧!一、函数参数函数参数在本质上与局部变量相同在栈上分配空间函数参数的初始值是函数调...
    99+
    2023-06-30
  • C语言函数的参数使用指针
    在c语言中实参和形参之间的数据传输是单向的“值传递”方式,也就是实参可以影响形参,而形参不能影响实参。指针变量作为参数也不例外,但是可以改变实参指针变量所指向的变量的值。 #in...
    99+
    2022-11-12
  • C语言深入讲解函数参数的使用
    目录一、函数参数二、程序的顺序点三、小结-上四、调用约定五、可变参数六、可变参数的限制七、小结-下一、函数参数 函数参数在本质上与局部变量相同在栈上分配空间函数参数的初始值是函数调用...
    99+
    2022-11-13
  • Go语言怎么使用变长参数函数
    目录01 介绍02 变长参数03 变长参数函数04 使用场景05 总结本文我们主要介绍在 Go 语言中怎么使用变长参数函数,先是介绍变长参数和变长参数函数的相关知识,然后列举了一个简...
    99+
    2022-11-13
  • c语言str函数怎么使用
    在C语言中,str函数是用于在一个字符串中查找子字符串的函数。str函数的原型如下:cchar* str(char* str1, c...
    99+
    2023-10-18
    c语言
  • c语言loop函数怎么使用
    C语言中的循环语句可以使用不同的方式实现,包括for循环、while循环和do-while循环。下面以这三种常见的循环方式介绍如何使...
    99+
    2023-10-25
    c语言
  • c语言getinput函数怎么使用
    在C语言中,没有现成的`getinput`函数,您需要自己编写一个函数来获取输入。下面是一个示例:```c#include void...
    99+
    2023-09-16
    c语言
  • c语言cmp函数怎么使用
    在C语言中,可以使用cmp函数来比较两个元素的大小。该函数需要自定义实现,因为C语言本身不提供cmp函数。cmp函数应该返回一个整数...
    99+
    2023-09-16
    c语言
  • c语言createFileA函数怎么使用
    createFileA函数是用来创建一个文件的函数,其使用方法如下:1. 首先,你需要包含头文件 `windows.h`,因为`cr...
    99+
    2023-09-08
    c语言 createFileA
  • C语言memcpy函数怎么使用
    memcpy函数是C语言中的一个内存拷贝函数,用于将源内存区域的数据复制到目标内存区域。它的函数原型如下:```cvoid* mem...
    99+
    2023-09-08
    C语言 memcpy
  • c语言wait函数怎么使用
    在C语言中,`wait()`函数用于让父进程等待子进程的结束。其语法如下:```c#include #include pid_t w...
    99+
    2023-09-11
    c语言
  • C语言LoadImageA函数怎么使用
    在C语言中,可以使用LoadImageA函数来加载图像文件。下面是一个使用LoadImageA函数的示例:```c#include ...
    99+
    2023-09-13
    C语言
  • c语言loadimage()函数怎么使用
    loadimage()函数是C语言中的一个函数,用于加载图像文件。它的使用方法如下:1. 首先,需要在程序中包含相关的头文件:```...
    99+
    2023-09-14
    c语言
  • C语言OutputDebugString函数怎么使用
    OutputDebugString函数是Windows API中的一个函数,用于向调试器输出调试信息。它的原型如下:```cvoid...
    99+
    2023-09-14
    C语言
  • c语言playsound函数怎么使用
    在C语言中,可以使用`PlaySound`函数来播放音频文件。`PlaySound`函数位于`mmsystem.h`头文件中,需要使...
    99+
    2023-09-16
    c语言
  • c语言dirname函数怎么使用
    C语言中的`dirname`函数用于获取一个文件路径的目录部分。它的函数原型如下:```c#include char *dirnam...
    99+
    2023-08-08
    c语言 dirname
  • c语言fopen函数怎么使用
    fopen函数是C标准库中用于打开文件的函数,其原型如下:```cFILE *fopen(const char *filename,...
    99+
    2023-08-15
    c语言 fopen
  • C语言fprintf()函数怎么使用
    C语言中的fprintf()函数用于将格式化的数据写入文件中。它的函数原型如下:```cint fprintf(FILE *stre...
    99+
    2023-08-18
    C语言 fprintf()
  • C语言fscanf()函数怎么使用
    fscanf()函数用于从文件中读取格式化数据。它的使用方式如下:```cint fscanf(FILE *stream, cons...
    99+
    2023-08-18
    C语言 fscanf()
  • c语言modify函数怎么使用
    在C语言中,函数的修改通常通过传递指针参数实现。以下是一个使用modify函数的示例: #include void modify...
    99+
    2023-10-27
    c语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作