
C语言
無昼
这个作者很懒,什么都没留下…
展开
-
一段广为人知的代码
#include <stdio.h><>:从系统指定的目录下加载文件" ":先从目录下加载如果没有,再从系统制定的目录下加载文件,系统通过设置环境变量来指定加载文件的路径#include:是预处理器指令中的一种,功能是导入一个辅助文件到当前文件stdio.h:标准库(C语言标准委员会所编写的一些C语言基础功能)中的头文件(dtandard in out head)...原创 2019-07-29 09:30:44 · 160 阅读 · 0 评论 -
指针(2)——使用指针要注意的问题
空指针指针变量的值等于NULL(NULL可能等于0可能不等于,不同系统下值不同),这种指针叫空指针注意:当操作系统重启时会跳转到NULL地址,进行重启,因此NULL存储操作系统用于重启的数据,因此不能对空指针解引用(不能用空指针访问内存),一定会出现段错误NULL在C语言中是一种错误标志,如果函数的返回值是指针类型,结果一旦NULL表示函数执行出错或失败如何避免空指针造成的错误?使用来历...原创 2019-08-05 19:28:54 · 317 阅读 · 0 评论 -
指针(3)
指针的运算指针变量中存储的就是整数,因此整型数据能使用的运算符指针变量基本都能使用,但不是所有的运算都有意义指针进行前后移动指针 + 整数 = 指针 + 宽度 × 整数指针 - 整数 = 指针 - 宽度 × 整数两个指针之间相隔多少个元素指针 - 指针 = (指针 - 指针) / 宽度可以判断两个指针谁在前谁在后指针 关系运算符 指针 (< 、> 、>= 、<...原创 2019-08-05 19:45:02 · 188 阅读 · 0 评论 -
内存相关
内存映射当程序运行后,就会有0~4G地址范围(并不能全部访问,地址没有对应物理内存)如果访问了没有映射过的地址(逻辑地址)就会产生段错误当首次使用malloc申请内存时,malloc没有内存可分配,它会向操作系统申请进行内存映射,操作系统会直接映射33页(4096(即4*1024)字节)内存交给管理,当再次使用malloc申请内存时,malloc会把已经有的33页内存进行分配内存管理ma...原创 2019-08-08 20:57:42 · 227 阅读 · 0 评论 -
堆内存管理
堆内存是代码段当中的其中一段,特点就是大,但不能与标识符建立联系,只能与指针配合使用C语言没有提供管理堆内存的语句,而是标准库提供了一套管理内存的函数函数#include<stdlib.h>void * malloc(size_t size);功能:从堆内存中分配内存参数: size 所申请的字节数,一般使用 sizeof 计算 返回值:所申请的内存的首地址注意: ...原创 2019-08-07 17:00:22 · 400 阅读 · 0 评论 -
字符串(1)——相关定义
字符字符就是符号或图案,在计算机中是以整数形式存储的,当需要显示的时候会根据ASCII码表中的对应关系显示出相关的符号‘\0’ -> 0‘0’ -> 48 (字符0)‘A’ -> 65‘a’ -> 97串一种数据结构,由若干个相同类型的元素组成,有一个明确的结束标志,对串的所有操作都是以这个标志为结束信号字符串由字符组成的串型数据结构,以’\0’作为结束...原创 2019-08-10 14:03:57 · 262 阅读 · 0 评论 -
字符串(1)——相关使用
字符串的输出printf("%s",字符串首地址);优点:自带遇到’\0’就停止的功能puts(字符串首地址);优点:不需要占位符,只需要字符串的首地址,且自动换行putchar( )显示一个字符字符串的输入scanf("%s",内存地址);注意: scanf("%s",arr); -> 不用再取地址(&),数组名本身就是地址了优点:自动添加’\0’缺点:不能输...原创 2019-08-10 14:59:48 · 317 阅读 · 0 评论 -
预处理指令
在C语言中以#开头的语句都叫做预处理指令,因为这些不是标准的C代码,不能被编译器直接编译,需要一段程序把它翻译成标准的C代码,负责翻译的程序叫预处理器,翻译的过程叫预处理。gcc -E code.c 把预处理的结果显示在终端上gcc -E code.c -o code.i 把预处理的结果存储到文件中(-o :重命名,为执行/编译的结果重新取名)例:gcc hello.c -o hell...原创 2019-08-11 17:10:38 · 363 阅读 · 0 评论 -
结构
结构(struct)注意:命名开头大写!什么是结构:一种程序员自己设计的数据类型,由若干个不同的数据类型组成,可用于描述一个事物的各项数据设计结构 struct 结构名 { 类型1 成员名1:n; // 可以用n指定成员使用的字节数 类型2 成员名2; 类型3 成员名4; ... };定义结构变量 struct 结构名 结构变量...原创 2019-08-11 23:46:08 · 241 阅读 · 0 评论 -
联合——大小端
联合(union)注意:命名开头大写!它与结构的使用语法基本一样,区别是结构的每个成员都有独立的存储空间,而联合是所有成员共用一块存储空间(每个成员都从0地址开始),因此同一时刻只能有一个成员使用,只要有一个成员的值发生变化,其它成员的值也会随之变化注意:联合的特点就是使用少量的内存对应多个标识符,使用它可以节约内存,在现代的编程中很少使用联合(不再需要极端地节约内存了)相关重点:1、计...原创 2019-08-11 23:52:40 · 233 阅读 · 0 评论 -
枚举
枚举(enum)注意:命名开头大写!枚举就是一个个列举出来枚举就相当于值受限的int类型,定义枚举就是把这种变量可以等于的值列举出来,用一个标识符表示,除此之外再等于其它值就是非法的(C语言中不检查,为了运行效率,但在C++中会严格检查)枚举值默认从零开始,逐渐加1,也可以指定枚举值可以直接当常量使用(可以使用在case后),可以用有意义的单词代表无意义的数字,可以提高程序的可读性注意...原创 2019-08-11 23:55:06 · 532 阅读 · 0 评论 -
多文件编程
多文件编程当代码过多时如果全写在一个.c文件中就会对代码的编写、阅读、调试造成干扰,为了更方便地管理代码,一般都按照功能模块,把代码拆分成多个.c文件,为每个.c文件编写一个.h文件用于说明.c中有哪些函数、全局变量,然后分别编译每个.c文件(gcc -c code.c),会生成目标文件,然后再把多个目标文件合并成一个可执行文件注意:.c文件最好也包含对应的.h文件,这样可以防止函数的声明与现...原创 2019-08-12 00:06:30 · 257 阅读 · 0 评论 -
指针(1)
什么是指针指针是一种数据类型(里面存储的是整数),使用它可以用来定义变量(与int、long一样),与int、long不同的是它存储整数代表了内存的编号,通过这个变量可以访问对应编号的内存为什么使用指针1、堆内存无法取名字(无法使用标识符与堆内存建立联系),必须配合指针2、函数之间的参数是值传递(内存拷贝),使用指针可以优化参数的传递效率(指针永远传递4字节,无论内容多大)(需要对变量进行...原创 2019-08-05 19:20:13 · 176 阅读 · 0 评论 -
流程控制
分支语句:1、 if(表达式){表达式值为真,执行此处代码}2、 if(表达式){表达式值为真,执行此处代码}else{表达式值为假,执行此处代码}3、 if(表达式1){表达式1值为真,执行此处代码}else if(表达式2){表达式2值为真,执行此处代码}else{表达式值1\2都为假,执行此处代码}注:当要执行的代码只有一行,语法上可以省略大...原创 2019-08-01 09:22:17 · 150 阅读 · 0 评论 -
数据类型
复合结构、联合、枚举、类内建 **整型(没有小数点)** 有符号:存储数据的最高的二进制位用来表示正负号(符号) signed char %hhd 1 -128~127 signed short %hd 2 -32768~32767 signed int %d 4 正负2开头的10位数 signed long %ld 4/8 sig...原创 2019-07-29 09:47:00 · 136 阅读 · 0 评论 -
存储数据的容器或盒子
变量定义:类型 变量名;变量的默认值是不确定的,一定要初始化较稳妥变量取名硬性规定:1、由数字、字母、下划线组成,不能使用其它符号2、不能以数字开头3、不能与关键字重名(32个)使用:1、可以被赋值 -> num = 10;2、可以赋值一个数据,参与表达式的运算->(num + 10)*2变量的输出:printf 变量的类型 变量名C语言中通过占位符表示数据...原创 2019-07-30 20:59:47 · 493 阅读 · 0 评论 -
数组
什么是数组:数组就是相同类型变量的组合,它是一种制定定义变量的方法一维数组:把变量排成一排定义:类型 数组名[数量];int arr[5];int num1,num2,num3,num4,num5;使用:数组名+编号(下标)arr[0],arr[1],arr[2],arr[3],arr[4]注意:数组的编号从0开始, 0~数量-1遍历:使用for循环配合,使用循环变量当做数组的...原创 2019-08-03 17:13:00 · 138 阅读 · 0 评论 -
函数
函数是C语言管理代码的最小函数,一个函数就是一段具有某项功能的代码标准库函数C语言标准委员会,为C语言提供的一些基础功能,以函数形式体现,常用的库函数有:rand: 获取随机数注意:现阶段计算机中的随机数是伪随机数,是把所有的无符号整数打乱顺序存储在计算机,rand就是从这个序列中获取,而不是计算rand默认从第一个位置开始获取,获取的数据每次都一样srand:设置rand开始获取的位...原创 2019-08-03 17:20:55 · 158 阅读 · 0 评论 -
数组的越界
编译器不会检查数组的下标,因此使用数组可以越界(且不会有语法错误)越界后果:1、一切正常2、脏数据 int arr[10]; for(int i = 0; i <= 10; i++) { arr[i] = 0; printf("--------%d\n",i); }运行结果: 0~9无限循环原因:定义时给定空间:[0][1][2][3][4][5][6][7][...原创 2019-08-03 17:24:49 · 243 阅读 · 0 评论 -
函数的传参
函数之间只能是值传递,变量赋值(内存拷贝)1、调用函数时,调用者与被调函数传参1、函数的形参和实参是相互独立的两个变量// 形参:void func(int num)形参变量属于被调用者// 实参:func(num);实参变量属于调用者它们的名字可以相同,但属于不用的函数2、(void)与()不同(void) 不给参数才能调用() 任何参数都能调用3、 例:#inclu...原创 2019-08-03 17:36:07 · 224 阅读 · 0 评论 -
程序在内存中的分布情况
一个程序运行后在内存中会划分成不同的内存段(一般为50或60),其中与编程相关有:代码段:二进制指令,只读权限只读段:用来存储常量,一旦被修改就会产生段错误全局段(data):存储全局变量静态数据段(bss):程序运行后这段内存会被清理成零栈:数据先进后出,操作系统自动管理,内存的申请和释放都是自动的堆:数据无规则的堆在一起,由程序员自己管理(手动申请、释放)注: gcc 编译后 ,...原创 2019-08-04 16:49:30 · 457 阅读 · 0 评论 -
变量的分类
变量的属性: 存储位置、生命周期、作用域全局变量定义在函数外存储位置:初始化过存储在全局段,未初始化存储在静态数据段,全局变量有默认值(0)生命周期:程序运行前就定义好,程序结束后才会被释放,在程序运行期间不会被释放,比较浪费内存作用域:整个程序的任何位置都可以使用注意:这是共享数据的一种方式,但要尽量少用,以免造成命令冲突局部变量定义在函数内,只属于它所在的函数存储位置:栈,...原创 2019-08-04 17:02:17 · 222 阅读 · 0 评论 -
修饰变量的关键词
auto定义自动申请内存、释放的变量,不加就代表加注意:局部变量和块变量都默认添加 auto , 全局变量不能加const用来保护数据,变量被修饰后就具有了“只读”属性注意:真正的只读数据被修改会产生段错误,其作用只是保护!不能显式修改,但不代表不能改 例:int main(){ const int num = 10; int* p = (int*)# *p...原创 2019-08-04 17:31:01 · 310 阅读 · 0 评论 -
缓冲区
输入缓冲区通过终端输入的数据会先存入在输入缓冲区中,前面数据输入的数据可能会影响后续数据的输入典型残留垃圾的情况:先输入整数、浮点数据,再输入字符或字符串清理缓冲区的方法:1、 通过正则表达式清理缓冲区scanf("%*[^\n]");scanf("%*c);%:拿数据*:丢数据[^\n]:数据丢到至\n缺点:确定缓冲区中有残留的数据2、 调整缓冲区位置指针(将缓冲区的当前...原创 2019-08-04 17:51:50 · 237 阅读 · 0 评论 -
运算符
算术运算符:+ - * / %/ 和 % 除数不能为零 --> 为零的结局:浮点数例外(核心已转储)关系运算符:> < >= <= == !(1) 3 < x < 9 -> x值永远为真 -> (3 < x) => 0 或1 => 永远小于9–> 3 < x &am...原创 2019-07-31 20:56:43 · 185 阅读 · 0 评论 -
类型转换
自动类型转换:C语言规定:只有相同类型的数据才能一起进行计算多种不同类型的表达式中,会以不丢失数据为前提,把不同类型的数据,先转换成同一种类型,再进行计算1、字节少 -> 字节多unsigned short num = 10;if(num +( -100) > 0){printf(“大于\n”);}else{printf(“小于\n”);} -> 小于...原创 2019-08-01 09:00:54 · 114 阅读 · 0 评论 -
文件
文本文件与二进制文件:磁盘只能存储二进制数据 int num = 100;文本文件中存储的是ASCII码的二进制,先把数据转换成字符中,再写入到文件中,可以直接被文本编辑器打开 -> ‘1’,‘0’,‘0’ -> 存三个字节二进制文件中存储的是数据的二进制,直接把数据的二进制存储到文件中,无法直接通过文件编辑器查看 -> 都是四字节文件I/O:打开FILE *...原创 2019-08-12 21:03:19 · 252 阅读 · 0 评论