c语言函数

C语言字符串

本秂侑毒 提交于 2020-03-15 18:00:54
目录 一、字符串的概念 二、占用内存的情况 三、字符串的初始化 四、字符串与指针 五、字符串的结尾标志 六、字符串的输出 七、字符串越界 八、字符串常用的库函数 1、获取字符串的长度(strlen) 2、字符串复制或赋值(strcpy) 3、字符串复制或赋值(strncpy) 4、字符串拼接(strcat) 5、字符串拼接(strncat) 6、字符串比较(strcmp、strncmp) 7、字符查找(strchr、strrchr) 8、字符串查找(strstr) 九、应用经验 1、留有余地 2、变量初始化 3、位置(地址)偏移的用法 4、不要在子函数中对字符指针用sizeof 十、课后作业 十一、版权声明 在很多教程中,字符串不过是一个以0结束的字符数组,但是,在我看来,字符串虽然不是C语言基本数据类型,但它比任何数据类型都重要,因为字符串是最常用的数据。 一、字符串的概念 我们可以把字符串储存在char类型的数组中,如果char类型的数组末尾包含一个表示字符串末尾的空字符\0,则该数组中的内容就构成了一个字符串。 因为字符串需要用\0结尾,所以在定义字符串的时候,字符数组的长度要预留多一个字节用来存放\0,\0就是数字0。这是约定。 char strname[21]; // 定义一个最多存放20个英文字符或十个中文的字符串 字符串也可以存放中文和全角的标点符号

C语言中不同变量的访问方式

主宰稳场 提交于 2020-03-12 07:04:10
C语言中的变量大致可以分为全局变量,局部变量,堆变量和静态局部变量,这些不同的变量存储在不同的位置,有不同的生命周期。一般程序将内存分为数据段、代码段、栈段、堆段,这几类变量存储在不同的段中,造成了它们有不同的生命周期。 全局变量 全局变量的生命周期是整个程序的生命周期,随着程序的运行而存在,随着程序的结束而消亡,全局变量位于程序的数据段。每个应用程序有4GB的虚拟地址空间,在程序开始时系统将这个程序加载到内存中,为其分配内存,这个时候,会根据程序文件的内容,为全局变量分配内存,并为之进行初始化,当程序的生命周期结束时,系统回收进程所消耗的资源,这个时候,全局变量所占的内存被销毁。 下面来看一段具体的代码: int i= 0; int main(int argc, char* argv[]) { printf("%d\n", i); return 0; } 11: printf("%d\n", i); 00401268 mov eax,[i (00432e24)] 0040126D push eax 0040126E push offset string "%d\n" (0042e01c) 从上述的汇编代码中可以看到,i所对应的地址为0x00432e24,在调用全局变量时,使用的是一个具体的地址,但是并没有看对应初始化i变量的反汇编代码,这是因为在程序开始运行之前

初识C语言(一)

喜欢而已 提交于 2020-03-12 04:50:12
C语言的结构体 一个C程序就是由多个头文件和函数组成 #include<stdio.h> /* 包含头文件*/ int main() { printf('"hello world\n"); /*主函数*/ return 0;/*返回值*/ } #include <stdio.h>就是一条预处理命令,它的作用是通知C语言编译系统在对C程序进行正式编译之前需做一些预处理工作。 函数就是实现代码逻辑的一个小的单元。 注释: 在最新的C标准中,main函数前面的类型为int而不是void。 主函数 C语言有且只有一个主函数,即main函数。 # include<stdio.h> int main() { printf(“这是C语言的唯一主函数\n”); return 0; } C程序就是执行主函数里面的代码,也就是说这个主函数是C语言中的唯一入口。 而main前面的int就是这个主函数的类型。 printf()是格式输出函数,它的功能就是在屏幕上输出指定的信息。 return是函数的返回值,根据函数类型的不同,返回的结果也就不同。 C语言格式书写的规范 一个说明或者一句占一行 函数体内的语句要有明显的缩进,通常是以按一下tab键为一个缩进; 括号要成对写,如果需要的话也要成对删除; 当一句语句执行结束时的结尾要有一个分号; 代码中的符号均为英文符号; 多行注释:/ 注释内容 /; 单行注释

C语言函数3

前提是你 提交于 2020-03-09 06:52:02
函数递归 递归定义: 程序调用自身的编程技巧称为递归( recursion)。 递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。 递归的主要思考方式在于: 把大事化小 递归的必要条件: 存在限制条件,当满足这个限制条件的时候,递归便不再继续。 每次递归调用之后越来越接近这个限制条件。 递归函数举例: 接受一个整型值(无符号),按照顺序打印它的每一位。 解析: 如输入1234,要使按顺序输出1 2 3 4 函数带入参数(1234) 由于1234不是单个数字,则进入向内层 递 的过程(给1234/10) 再次带入参数(123) 由于123不是单个数字,则进入向内层 递 的过程(给123/10) 再次带入参数(12) 由于12不是单个数字,则进入向内层 递 的过程(给12/10) 再次带入参数(1) 由于1是单个数字,则进行打印并向外层 归 的过程。 代码: # include <stdio.h> void print ( int n ) { if ( n > 9 ) { print ( n / 10 ) ; } printf ( "%d " , n % 10 ) ;

C语言函数2

拈花ヽ惹草 提交于 2020-03-08 20:28:32
函数 函数链式访问 把一个函数的返回值作为另外一个函数的参数。 # include <stdio.h> # include <string.h> int main ( ) { char arr [ 20 ] = "hello" ; int ret = strlen ( strcat ( arr , "bit" ) ) ; printf ( "%d\n" , ret ) ; return 0 ; } # include <stdio.h> int main ( ) { printf ( "%d" , printf ( "%d" , printf ( "%d" , 43 ) ) ) ; return 0 ; } 函数的声明和定义 函数声明: 函数的声明一般出现在函数的使用之前。要满足先声明后使用。 函数的声明一般要放在头文件中的。 函数声明是为了告诉编译器有一个函数,参数,返回类型。 # ifndef __TEST_H__ # define __TEST_H__ //函数的声明 int Add ( int x , int y ) ; # endif //__TEST_H__ 函数定义: 函数的定义是指函数的具体实现,交代函数的功能。 # include "test.h" //函数的实现 int Add ( int x , int y ) { return x + y ; } 来源:

C语言指针

夙愿已清 提交于 2020-03-08 20:00:15
10 指针 指针是C语言中广泛使用的一种数据类型。运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构;能很方便地使用数组和字符串;并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了C语言的功能。学习指针是学习C语言中最重要的一环,能否正确理解和使用指针是我们是否掌握C语言的一个标志。同时,指针也是C语言中最为困难的一部分,在学习中除了要正确理解基本概念,还必须要多编程,上机调试。只要作到这些,指针也是不难掌握的。 10.1 地址指针的基本概念 在计算机中,所有的数据都是存放在存储器中的。一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,在前面已有详细的介绍。为了正确地访问这些内存单元,必须为每个内存单元编上号。根据一个内存单元的编号即可准确地找到该内存单元。内存单元的编号也叫做地址。既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针。 内存单元的指针和内存单元的内容是两个不同的概念。 可以用一个通俗的例子来说明它们之间的关系。我们到银行去存取款时,银行工作人员将根据我们的帐号去找我们的存款单, 找到之后在存单上写入存款、取款的金额。在这里,帐号就是存单的指针, 存款数是存单的内容。对于一个内存单元来说,单元的地址即为指针

【排序】--C语言实现堆排序

独自空忆成欢 提交于 2020-03-07 13:50:54
堆排序 堆排序使用【大顶堆】或者【小顶堆】实现。分为两步:构建堆和调整堆,主要时间都花在了构建堆上。堆排序效率比较高,适用于数据量比较大的场景。 代码 # include <stdio.h> /* 函数描述:构建大顶堆 函数参数:数组 根节点的下标 最后一个结点的下标 */ void AdjustMaxHeap ( int * a , int root , int last ) { int i , child ; int tmp = a [ root ] ; for ( ; 2 * root + 1 <= last ; root = child ) //循环到结点没有孩子结点为止 { child = 2 * root + 1 ; if ( child + 1 <= last && a [ child ] < a [ child + 1 ] ) //先找出两个孩子结点中较大的一个 { child ++ ; } if ( a [ child ] > a [ root ] ) //如果孩子结点比较大,则和根节点交换 { a [ root ] = a [ child ] ; a [ child ] = tmp ; } else { break ; } } } void swap ( int * x , int * y ) { int t = * x ; * x = * y ; * y =

C语言第三章自述 1

烈酒焚心 提交于 2020-03-06 10:26:16
** 框架** 3.1C语句概述 (语句描述了一种行为,是向计算机发出的执行某一操作的指令) 1.表达式语句 表达式后加一个“;”构成表达式语句。 例: 加入存在变量定义: int a,b; 以下语句存在意义: a=3; //赋值表达式构成语句,赋值变量a b=a+3; //赋值表达式构成语句将a+3的结果赋给b a++; //自加表达式构成语句,执行后变量a自加 a=3,b=4; //逗号表达式构成语句,执行后变量a的值为3,b的值为4 2.流程控制语句 (1)选择结构的控制语句:if双分支选择结构,which多分枝选择结构。 (2)循环结构控制语句:while语句和for语句控制的当型循环结构,do~while控制的直到型循环结构。 (3)控制流程转换语句:又称为跳转语句,包括break,contiune,goto,return语句。 3.空语句:只有一个分号,用于完善选择结构和循环结构。 4.复合语句 以花括号“{ }”括起来的功能相对完善的程序段。 例: #include <stdio.h> int add(int x, int y) { int t; t = x + y; return (t); } void main() { int a, b, sum; scanf("%d%d", &a, &b); sum = add(a, b); printf("sum=%d\n",

C语言俄罗斯方块代码

扶醉桌前 提交于 2020-03-04 05:52:33
这是我用Xcode编写的俄罗斯方块,我目前就读大一,很多东西还没有学,比如多线程什么的,导致方块不能实现自主下降,只能自己按‘s’来实现下降,不过这都无所谓,但是不知道为什么程序运行不了,看了好久都没看出错在哪里,希望能够得到大神的求助!感谢! 头文件,我也不知道是不是都用得上 # include <stdio.h> # include <stdlib.h> # include <time.h> # include <curses.h> 全局变量 int i , j , a [ 25 ] [ 10 ] ; char l ; 生成界面,我用的二维数组是a[25][10],周围边框的值为2,一共有6种方块,每一类型的方块都用一个数字表示,当随机生成一个数字后,相应的方块的坐标值为1,其余为0,即空格,我还同时计算出来方块最上面最下面最左边最右边的坐标方便移动和判断 int * shengcheng ( int a [ ] [ 10 ] , int up ) { int n , m , min , max , b [ 6 ] = { 1 , 2 , 3 , 4 , 5 , 6 } , c [ 8 ] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 } , d [ 6 ] , * p , flag = 0 , down ; srand ( ( int ) time (

c语言中的return 0有什么用?

非 Y 不嫁゛ 提交于 2020-03-03 15:33:53
C语言为什么要return 0(个人看法) c语言中的return 0有什么用? 用return这种形式就能定义返回值, return 0可以 终止 main() 函数,并返回值 0。 return 0 代表程序正常退出,return 1代表程序异常退出! 使用return 语句可以返回一个变量内的值或一个指针,也可用return0,表示返回为空。 return 代表调到函数外, return 0代表函数正常终止 return 1代表函数非正常终止 而我觉得还有一个作用就是return之后你至少知道代码成功运行到最后一行,中间没有异常中止,并且return 关键字的还有一个作用是返回程序流程的控制权!其副作用是返回一个值。 来源: CSDN 作者: dio___da 链接: https://blog.csdn.net/m0_37187717/article/details/104631305