c语言函数

2019/8/25 C语言回顾(8)

此生再无相见时 提交于 2019-11-28 13:39:53
一、函数 函数是功能性代码的集合,通常情况下函数需要返回值 1、函数声明 返回值类型 函数名(形参); 不写声明会有警告,或者可以将函数定义拿到main函数上方 2、函数调用 函数名(实参); 3、函数定 { c语句块; return ; } 形参:一定是变量,用来接收实参的值 实参:可以是变量,也可以是常量 二、函数传参 1、赋值传参 把值拷贝一份,对拷贝的值修改不会影响原来的值 2、地址传参 将某一个数据的地址传参,通过地址修改数据会改变原来的数据 一般情况下不要将全局变量作为传参 【1】数组传参 一维数组传参 int a[3] = {1,2,3}; 1、一种形式 int fun(int a[3]) { return 0; } fun(a); 2、第二种形式 int fun(int *p) { return 0; } 二维数组传参 int a[2][3] = {{1,2,3},{4,5,6}}; fun(a); int fun(int a[2][3]) // int (*p)[3] int fun(int (*p)[3]) 指针数组传参 int *a[3] ={}; fun(a); int fun(int *a[]) int fun(int **p) 【2】返回值为指针的函数 注意:返回的地址不可以是一个非静态局部变量的地址,当函数调用结束之后,该地址里面的内容随时会被改变

Linux下C语言编程

自闭症网瘾萝莉.ら 提交于 2019-11-28 11:37:20
安装gcc sudo apt update sudo apt install build-essential gcc --version gcc的常用命令 gcc -c gcc -o gcc -o program program.c -L. -lfoo   // -L.表示在当前目录下查找函数库 ar crv : 将两个.o文件合并成一个库函数文件 nm命令: 查看那些函数包含在目标文件, 函数库或可执行文件 ldd命令: 查看一个可执行程序所需要的共享库 (base) asgter@asgter-TM1613:~/Linux/C/funclib$ ldd program linux-vdso.so.1 => (0x00007ffe2cfb8000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdd6b74d000) /lib64/ld-linux-x86-64.so.2 (0x00007fdd6bb17000) C语言的3种格式 1 .c或.h 结尾的文件就是字符串形式的文本   .c 结尾的文件中带有main函数的, 是程序会执行的文件; 不带main的就是函数库文件了   .h 结尾的文件, 是前面.c文件定义的函数的函数声明 2 .o 结尾的文件就是二进制字节, 其中可能把引用的头文件添加到二进制字节中了 3

C语言的内联函数的作用

主宰稳场 提交于 2019-11-28 10:44:30
   view plain copy关内联函数键字inline    view plain copyvoid myprintf(int a)   {   priintf(“%d”,a);   }   int main()   {   for(i=0;i《100;i++)   myprintf(3);   }   对于这个函数,在进行反复的打印3的过程中我们是不是要反复的调用myprintf(int a)这个函数,进函数和出函数是需要时间的,假设这个过程用时为4ms,而执行printf这个操作只需要2ms,那么在100次循环的过程中进出函数的时间比函数功能printf需要的时间还要长,这样很影响工作效率。于是,我们就想要如何去免去进出函数的过程呢?那么就可以声明inline这个关键字,有何用途?当我们声明了一个inline的函数时候,函数被调用的语句就被替换成了函数本身,进行了一个预处理 view plain copyint main()   {   for(i=0;i《100;i++)   void myprintf(3)   {   printf(“%d”,3);   }   return 0;   }   这样一来我就非常明显的知道这个函数是干什么的了,就不需要去调用函数的定义部分,再通俗点讲,原来我要从家里去外面的商店去买冰淇淋(来回需要时间),现在商店就在我家里面了

C语言--strcpy()函数

北战南征 提交于 2019-11-28 10:41:18
strcpy,即string copy(字符串复制)的缩写。 strcpy是一种C语言的标准库函数,strcpy把含有 ' '\0'结束符的字符串复制到另一个地址空间,返回值的类型为char*。 C语言 strcpy() 函数用于对字符串进行复制(拷贝)。 头文件:string.h 语法/原型: char* strcpy(char* strDestination, const char* strSource); 参数说明: strDestination:目的字符串。 strSource:源字符串。 strcpy() 会把 strSource 指向的字符串复制到 strDestination。 必须保证 strDestination 足够大,能够容纳下 strSource,否则会导致溢出错误。 返回值:目的字符串,也即 strDestination。 【实例】使用C语言 strcpy() 函数将字符串 src 复制到 dest。 #include <stdio.h> #include <string.h> int main(){ char dest[10] = { 0 }; char src[10] = { "liangchen" }; strcpy(dest, src); puts(dest); return 0; }//输出:liangchen    来源: https:/

C语言中关于 strlen 和 sizeof 的用法及区别(含例题及解析)

本秂侑毒 提交于 2019-11-28 09:28:42
一、前言 首先我们需要知道的是,sizeof既是一个单目操作符,也是一个关键字,其作用是求操作数的 类型长度 (以字节为单位)。 而strlen是一个字符串操作函数,是一个 参数为指针类型 返回值为size_t(unsigned int)的函数,求的是 字符串 的长度。 所以现在我们知道 sizeof是一个求操作数类型长度的操作符(关键字),而strlen是一个求字符串长度的字符串操作函数 。 二、sizeof和strlen的用法 2.1 sizeof操作符在简单变量中的用法 int a = 10; char c = 'c'; printf("%d\n",sizeof(a)); //答案是4(操作数a的类型为整型,32位机器中占4个字节,64位机器中占8个字节) printf("%d\n",sizeof(int)); //答案是4 printf("%d\n",sizeof a); //答案是4(求变量的大小时可以去掉括号) printf("%d\n",sizeof int); //错误(求类型的大小时不能去掉括号) printf("%d\n",sizeof(c)); //答案是1(操作数c的类型为字符型,占1个字节) printf("%d\n",sizeof(char)); //答案是1 printf("%d\n",sizeof c); //答案是1(求变量的大小时可以去掉括号)

C语言中static extern的使用

ⅰ亾dé卋堺 提交于 2019-11-28 01:32:28
10:30:22 2019-08-20 基础不牢 瞬间爆炸 参考资料: https://blog.csdn.net/ts_54eagle/article/details/4418627 https://blog.csdn.net/xingjiarong/article/details/47656339 https://blog.csdn.net/xingjiarong/article/details/47656339 看看C Primer Plus上是怎么定义的 先说说作用域 分为4种:块作用域 函数作用域 函数原型作用域 文件作用域 这里要说明的是 块作用域指{}之间的部分 而函数作用域单单指goto标签 当goto标签出现在函数内部时 goto标签作用域蔓延至整个函数 函数原型作用域从形参定义到原型声明结束为止 文件作用域指的是 该文件 该文件 该文件 从变量定义到文件末尾都可见 链接分为3种:外部链接 内部链接 无链接 (决定了是否能被外部文件使用) 块作用域 函数作用域 函数原型作用域的变量 都属于无链接 文件作用域的变量 可以属于外部链接 也可属于内部链接 内部链接的文件作用域 称为 文件作用域(只能在该文件内部使用) 外部链接的文件作用域 称为 全局作用域(整个程序都可使用) 一个具有文件作用域的变量默认是具有全局作用域的 在前面加上static变为具有文件作用域

iOS开发系列--C语言之指针

笑着哭i 提交于 2019-11-28 01:04:06
概览 指针是C语言的精髓,但是很多初学者往往对于指针的概念并不深刻,以至于学完之后随着时间的推移越来越模糊,感觉指针难以掌握,本文通过简单的例子试图将指针解释清楚,今天的重点有几个方面: 什么是指针 数组和指针 函数指针 什么是指针 存放变量地址的变量我们称之为“指针变量”,简单的说变量p中存储的是变量a的地址,那么p就可以称为是指针变量,或者说p指向a。当我们访问a变量的时候其实是程序先根据a取得a对应的地址,再到这个地址对应的存储空间中拿到a的值,这种方式我们称之为“直接引用”;而当我们通过p取得a的时候首先要先根据p转换成p对应的存储地址,再根据这个地址到其对应的存储空间中拿到存储内容,它的内容其实就是a的地址,然后根据这个地址到对应的存储空间中取得对应的内容,这个内容就是a的值,这种通过p找到a对应地址再取值的方式成为“间接引用”。这里以表格形式列出a和p的存储以帮助大家理解上面说的内容: 接下来,看一下指针的赋值 // // main.c // Point // // Created by Kenshin Cui on 14-7-05. // Copyright (c) 2014年 Kenshin Cui. All rights reserved. // #include <stdio.h> int main(int argc, const char * argv[])

C语言之字符处理函数

亡梦爱人 提交于 2019-11-28 00:05:39
C语言标准库中字符处理函数许包含头文件 <string.h>,常用字符串吹函数列表如下: 1 计算字符串长度 size_t strlen(const char *str); //不包含结束符'\0' 2 字符串拷贝 char *strcpy(char *dest, const char *src); char *strncpy(char *dest, const char *src, size_t n); //最多复制n个字符 void *memcpy(void *dest, const void *src, size_t n); void *memmove(void *dest, const void *src, size_t n); 3 字符串比较 int strcmp(const char *str1, const char *str2); int strncmp(const char *str1, const char *str2, sieze_t n); //最多比较前n个字符 void memcmp(const void *str1, const void *str2, size_t n); 4 追加 char *strcat(char *dest, const char *src); char *strncat(char *dest, const char *src,

C语言程序设计(十二)

浪子不回头ぞ 提交于 2019-11-27 23:57:50
第十二章 结构体和共用体 当需要表示复杂对象时,仅使用几个基本数据类型显然是不够的 根本的解决方法是允许用户 自定义数据类型 构造数据类型(复合数据类型)允许用户根据实际需要利用已有的基本数据类型来构造自己所需的数据类型 它们是由基本数据类型派生而来的,用于表示链表、树、堆栈等复杂的数据对象 抽象数据类型不再单纯是一组值的集合,还包括作用在值集上的操作的集合 即在构造数据类型的基础上增加了对数据的操作,且类型的表示细节和操作的实现细节是对外不可见的 结构体类型数据存储的优点: 结构紧凑,易于管理 局部数据的相关性强,便于查找 赋值时只针对某个具体的对象,局部的输入错误不会影响全局 结构体:对关系紧密、逻辑相关、具有相同或者不同属性的数据进行处理 共用体:数据成员的情形是互斥的,每一时刻只有一个数据成员起作用 结构体模板的定义格式: struct 结构体名 { 数据类型 成员1的名字; 数据类型 成员2的名字; …… 数据类型 成员n的名字; }; 结构体的名字,称为结构体标签 构成结构体的变量,称为结构体成员 结构体模板只是声明了一种数据类型,定义了数据的组织形式,并未声明结构体类型的变量 typedef定义数据类型: typedef用于为系统固有的或程序员自定义的数据类型定义一个别名 typedef int INTEGER; typedef struct student

Linux C语言中gotoxy函数

房东的猫 提交于 2019-11-27 22:51:15
在Linux中很多函数都不能使用,gotoxy就是其中的一个 实现方法: void gotoxy(int x,int y) { printf("%c[%d;%df",0x1B,y,x); }  解析: ANSI转义序列,很多类unix的终端,包括linux控制台都解释ANSI转义序列,转义符就是ESC,ASCII码是0x1b,比如 Plain Text code Esc[Line,Columnf 就表示移动光标到(Line,Column)的位置。而你printf打印的字符串正是这个命令,其中0x1B正是 ESC的ASCII码。 在论坛中整理出来的,不好意思挖坟,但真心很赞,这里整理出来。如果不对,欢迎指出。 转载于:https://www.cnblogs.com/Hocker/p/5357125.html 来源: https://blog.csdn.net/weixin_38169359/article/details/99790373