首页 > 其他分享 >C语言学习记录----函数

C语言学习记录----函数

时间:2023-09-16 18:33:38浏览次数:34  
标签:char 函数 int C语言 ---- 字符串 实参 库函数

1. 函数是什么?

数学中我们常见到函数的概念。但是你了解C语言中的函数吗?

维基百科中对函数的定义:子程序

在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method,

subprogram, callable unit),是一个大型程序中的某部分代码, 由一个或多个语句块组

成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性。

一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软

件库。

2. C语言中函数的分类:

1. 库函数

2. 自定义函数

2.1 库函数:

为什么会有库函数?

1. 我们知道在我们学习C语言编程的时候,总是在一个代码编写完成之后迫不及待的想知道结果,想

把这个结果打印到我们的屏幕上看看。这个时候我们会频繁的使用一个功能:将信息按照一定的格

式打印到屏幕上(printf)。

2. 在编程的过程中我们会频繁的做一些字符串的拷贝工作(strcpy)。

3. 在编程是我们也计算,总是会计算n的k次方这样的运算(pow)。

像上面我们描述的基础功能,它们不是业务性的代码。我们在开发的过程中每个程序员都可能用的到,

为了支持可移植性和提高程序的效率,所以C语言的基础库中提供了一系列类似的库函数,方便程序员

进行软件开发。

简单的总结,C语言常用的库函数都有:

IO函数

字符串操作函数

字符操作函数

内存操作函数

时间/日期函数

数学函数

其他库函数

//strcpy函数
strcpy 函数用于将一个字符串(以 null 结尾)从源地址复制到目标地址,并返回指向目标字符串的指针。

参数解释如下:

destination:指向目标字符串的指针,必须具有足够的空间来存储源字符串的内容。
source:指向源字符串的指针,被复制到目标字符串。
函数返回指向目标字符串的指针。

以下是示例用法:

#include <stdio.h>
#include <string.h>

int main() {
    char source[] = "Hello, world!";
    char destination[20];
    strcpy(destination, source);
    printf("destination: %s\n", destination);
    return 0;
}
输出结果:

destination: Hello, world!
在上述例子中,strcpy 函数将源字符串 "Hello, world!" 复制到了目标字符串 destination 中。
请确保目标字符串具有足够的空间,以免发生溢出。请注意,在 C 语言中,
要确保目标字符串具有足够的大小,以容纳复制的内容。
int main()
{
    //strcoy---string copy---
    //char * strcpy ( char * destination, const char * source );
    char arr1[] = "bit";
    char arr2[20] = "######";
    //        bit\0####, \0字符串结束标志,也复制过来了
    strcpy(arr2,arr1);
    printf("%s\n",arr2);
    return 0;
}


//memset函数

//void * memset ( void * ptr, int value, size_t num );

memset 函数用于将指定内存区域的每个字节设置为指定的值。

参数解释如下:

ptr:指向要设置的内存区域的指针。

value:要设置的值,作为整数参数传递,
但是会被强制转换为 unsigned char 类型。

num:要设置的字节数。

函数返回指向 ptr 的指针。

以下是示例用法:
#include <stdio.h>
#include <string.h>

int main() {
    char str[6];
    memset(str, 'A', 5);
    str[5] = '\0';
    printf("str: %s\n", str);
    return 0;
}
输出结果:

str: AAAAA
在上述例子中,memset 函数用 'A' 值填充了 str 字符数组的前 5 个字节,
然后在最后一个字节处添加了字符串结束符 \0。

2.2 自定义函数

如果库函数能干所有的事情,那还要程序员干什么?

所有更加重要的是自定义函数

自定义函数和库函数一样,有函数名,返回值类型和函数参数。

但是不一样的是这些都是我们自己来设计。这给程序员一个很大的发挥空间。

函数的组成:

我们举一个例子:


ret_type fun_name(para1, * )
{
 statement;//语句项
}
ret_type 返回类型
fun_name 函数名
para1    函数参数

//get_max函数的设计
int get_max(int x, int y)
{
 return (x>y)?(x):(y);
}
int main()
{
 int num1 = 10;
 int num2 = 20;
 int max = get_max(num1, num2);
 printf("max = %d\n", max);

交换

void swap1(int x,int y)//导入啊,和b的之后,x与y形成了自己的空间
    //和下面的a和b没有关系,所以该函数功能无法实现
{
    int tmp = x;
    x = y;
    y = tmp;
}
int main()
{
    int a = 10;
    int b = 20;
    int swap1 = (a,b);
    printf("%d %d",a,b);
    return 0;
}



void Swap2(int* pa,int* pb)
{
    int tmp = *pa;
    *pa = *pb;
    *pb = tmp;
}

int main()
{
    int a = 10;
    int b = 20;
    // int* pa = &a; 指针变量,取地址
    // *pa = 20;// * 解引用操作
    printf("a = %d b = %d",a,b);   
     // int* pb = &b;
    Swap2(&a,&b);
    printf("%d %d",a,b);
    return 0;
}

3. 函数的参数

3.1 实际参数(实参):

真实传给函数的参数,叫实参。

实参可以是:常量、变量、表达式、函数等。

无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。

3.2 形式参数(形参):

形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。

因此形式参数只在函数中有效。上面 Swap1 和 Swap2 函数中的参数 x,y,px,py 都是形式参数。在main函数中传给 Swap1 的a , b和传给 Swap2 函数的 &a , &b 是实际参数

C语言学习记录----函数_字符串

C语言学习记录----函数_字符串_02

当实参传给形参时,形参只是实参的临时拷贝,对形参的修改是不会改变实参的;


4. 函数的调用:

4.1 传值调用

函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。只需要获取值则使用该方法,如前get_max;

4.2 传址调用

传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。

这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操 作函数外部的变量。

如果需要改变函数外部的变量,则考虑传址调用


标签:char,函数,int,C语言,----,字符串,实参,库函数
From: https://blog.51cto.com/u_16251486/7495534

相关文章

  • 使用Jenkins自动部署.NET站点
    Jenkins安装:参考文章【Jenkins安装】部署.NET站点1、新建项目1,1、Dashboard页面菜单>点击新建Item>输入名称"TestWebServiceDeploy",并且选择【Freestyleproject】风格  2、配置 2.1、描述和日志确定后可以配置要自动化发布的项目。首先可以填写描述,描述可以根......
  • 直线导轨滑块的固定方式
    直线导轨滑块是要安装到导轨上的,利用压力使得滑块固定到导轨上,并调整间隙精度,当机械中有振动或冲击力浸染时,滑块和滑轨很有可能发生松动,从而偏离原来的固定地位,影响运行精度与操作寿命,甚至无法正常使用,因此滑轨滑块的固定就很重要。那导轨滑块是怎么固定的,又有哪些固定方式呢?1>定位......
  • 概念结构设计阶段
        ......
  • 深入了解Elasticsearch搜索引擎篇:倒排索引、架构设计与优化策略
    什么是倒排索引?有什么好处?倒排索引是一种用于快速检索的数据结构,常用于搜索引擎和数据库中。与传统的正排索引不同,倒排索引是根据关键词来建立索引,而不是根据文档ID。倒排索引的建立过程如下:首先,将每个文档拆分成一系列的关键词或词项,然后建立一个词项到文档的映射。对每个关键词......
  • IDEA最新激20活23码
    大家好,最近IntelliIdea官方激20活23码的校验规则进行了更新,之前已经成功激20活23的Idea可能突然无法使用了。桃桃特地从网上整理了最新、最稳定的激活码分享给大家,希望可以帮助那些苦苦为寻找Idea激20活23码而劳累的朋友们。本激20活23码安全、可靠,最重要的是稳定。使用有效期到20......
  • 这浏览器有亿点小?
    最近发现一款电脑浏览器有亿点点猛啊,它叫123浏览器,功能非常强,注意低调使用。牛在哪?划重点,要考:它支持安装三大应用商店的扩展程序!!!谷歌扩展商店、Edge扩展商店和123浏览器自家扩展商店都能流畅访问,而且谷歌扩展商店是直接访问,你就说牛不牛吧。甚至Edge商店的扩展也可以随便装,要知道Ed......
  • STL(上)
    STL基本概念STL(StandardTemplateLibrary,标准模板库)STl从广义分为:容器(container)、算法(algorithm)、迭代器(iterator)容器和算法之间通过迭代器进行无缝链接STL几乎所有的代码都采用了模板类或者模板函数STL六大组件1.容器----各种数据结构,如vector、list、deque、set、map等用......
  • NAND/MTD/UBI/UBIFS概念及使用方法
    关键词:NAND,MLC/SLC,Page/SubPage,EraseBlock,OOB,ECC,BitFlip,MTD,UBI,wearing-level,LEB,PEB,EC/VID,Volume,UBIFS等等。 由于调试NANDLinux启动,记录NAND/MTD/UBI/UBIFS点点滴滴。未去分析Kernel对应模块和相关工具代码,仅从使用角度去记录。1.NAND/MTD/UBI/UBIFS整体框架如下是NAND、MT......
  • 大三每日总结
    学习软考程序设计语言机器语言和汇编语言为低级语言语言之间翻译的基本形式,有汇编,解释和编译源程序是用某种高级语言编写的则需要对应的解释程序或编译程序对其进行翻译解释程序也可以称为解释器,直接解释执行源程序,或者将源程序翻译成某种中间代码后再加以执行而编译程序(编......
  • E-R图设计和弱实体
       ......