C语言学习笔记
文章平均质量分 85
C语言学习笔记
羟基与苯
你好,工程师。
展开
-
C语言---条件编译、文件包含、.h头文件书写
🍍 条件编译如果我们在代码编写过程中,有一段代码弃之可惜,保留无用你会如何做呢?是直接删除还是大面积注释?当学习了解条件编译以后,就可以条件编译来“装b”的注释掉了。那么,让我们来看看什么是条件编译!条件编译,顾名思义,就是有条件的进行编译。举个例子:#include <stdio.h>#define DEBUGint main(){ int i = 0; int arr[10] = { 0 }; for (i = 0; i < 10; i++) { arr[i.原创 2022-04-07 17:36:04 · 2859 阅读 · 0 评论 -
C语言--预处理详解---#define的用法及注意事项
文章目录🍎 预定义符号🍎 #define🍧 #define定义标识符🍧 #define定义宏🍧 #define 替换规则🍧 \# 和 \##🍧 带副作用的宏参数🍧 宏和函数对比🍎 预定义符号形如:__FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义这些都叫做C语言中的预定义符号,它们各自原创 2022-04-07 15:28:31 · 2017 阅读 · 0 评论 -
C语言--程序的翻译环境(编译和链接)和运行环境
文章目录原创 2022-04-06 23:42:55 · 873 阅读 · 0 评论 -
C语言---文件操作及文件操作函数详解
文章目录一、为什么使用文件?二、什么是文件?三、文件的打开和关闭3.1 文件指针3.2 文件的打开和关闭本章重点为什么使用文件什么是文件文件的打开和关闭文件的顺序读写文件的随机读写文本文件和二进制文件文件读取结束的判定文件缓冲区一、为什么使用文件?从本专栏第一篇博客起到现在,我们写过的所有的程序,包括扫雷、三子棋、通讯录,它们的运行都是一次性的。当运行程序时,我们所写入和输出的内容都是存储于计算机内存中的,当程序运行结束就会消失。当重启程序,我们还得重新开始操作,这无疑是不合理的原创 2022-04-06 13:45:19 · 3410 阅读 · 2 评论 -
C语言--三组输入输出函数对比(scanf/fscanf/sscanf、printf/fprintf/sprintf)
文章目录前言1. scanf 和 printf 函数2. fscanf 和 fprintf 函数2.1 fprintf函数2.2 fscanf函数3. sscanf 和 sprintf 函数总结前言在C语言中有这么三组输入输出函数,分别是:scanf和printf、fscanf和fprintf、sscanf和sprintf这三组函数都有着输入输出的功能,但它们的区别在哪里呢?下面分别来介绍:1. scanf 和 printf 函数函数原型:int scanf( const char *fo原创 2022-04-05 16:01:11 · 540 阅读 · 0 评论 -
C语言---柔性数组
文章目录前言1. 柔性数组的特点2. 柔性数组的使用3. 为何选择柔性数组前言结构中最后一个元素允许是未知大小的数组,这个数组就是柔性数组。但结构中的柔性数组前面必须至少一个其他成员,柔性数组成员允许结构中包含一个大小可变的数组,sizeof返回的这种结构大小不包括柔性数组的内存。包含柔数组成员的结构用malloc函数进行内存的动态分配,且分配的内存应该大于结构的大小以适应柔性数组的预期大小。柔性数组的定义:struct test { short len; // 必须至少有一个其它成员原创 2022-04-04 16:19:07 · 206 阅读 · 0 评论 -
C语言--C/C++的内存开辟--C语言程序中的变量都存放在内存的什么地方
我们知道C语言程序中有全局变量、静态变量、局部变量等等,还知道内存分为堆区、栈区、静态区等等。那么这些不同的变量和这些不同的内存划分有什么关系呢?通过上图可以简单了解到各类型变量在内存中的位置。C/C++程序内存分配的几个区域:栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等。堆区(heap原创 2022-04-04 00:35:23 · 557 阅读 · 0 评论 -
C语言--这几道经典笔试题,你能一眼看出陷阱吗?
题目1问:有如下代码,Test()函数的运行结果如何?void GetMemory(char* p){ p = (char*)malloc(100);}void Test(void){ char* str = NULL; GetMemory(str);//值传参 strcpy(str, "hello world"); printf(str);}int main(){ Test(); return 0;}结果:这条代码会运行出结果,但是并不会和我们预想的一样打印出“原创 2022-04-03 23:26:28 · 692 阅读 · 1 评论 -
c语言--动态内存管理---动态内存函数的使用与常见的动态内存错误
文章目录前言一、为什么存在动态内存分配二、动态内存管理函数前言在程序设计中,有时候我们创建的某个变量需要在内存中开辟很大空间,但是只是为了保障这个变量的最大值能放下,在大部分场景下,并不需要那么大的空间。那么如果一开始就根据最大限度来开辟空间,而在实际使用中大部分空间不是被浪费了吗?有没有一种方法,能让我们动态地开辟空间,数据少了就减少空间,数据多了再慢慢开辟?本文将介绍动态内存管理地几个方面:为什么存在动态内存分配动态内存函数的介绍- malloc- free- calloc- rea原创 2022-04-03 21:08:20 · 692 阅读 · 0 评论 -
C语言--两种自定义类型:枚举、联合
文章目录前言一、枚举1.1 枚举类型的定义1.2 枚举的优点二、联合(共用体)2.1 联合类型的定义、特点2.2 联合的一个应用示例2.3 联合大小的计算前言上文我们已经介绍过自定义类型之结构体,本文将继续介绍自定类型剩下的两种:枚举、联合。本文涉及到的主要内容有:● 枚举 :a. 枚举类型的定义b. 枚举的优点c. 枚举的使用● 联合 :a. 联合类型的定义b. 联合的特点c. 联合大小的计算一、枚举枚举顾名思义就是一一列举。把可能的取值一一列举。比如我们日常原创 2022-04-01 16:25:06 · 158 阅读 · 0 评论 -
C语言--一文读懂自定义类型之结构体
文章目录结构体1.1 什么是结构体?1.2 结构体的声明1.3 结构体的引用1.3.1 结构体内引用其他结构体1.3.2 结构体自引用1.4 结构体变量的定义与初始化1.4.1 结构体变量定义1.4.2 结构体变量初始化1.4.3 结构体的访问1.5 结构体内存对齐1.5.1 什么是内存对齐?1.5.2 为什么要内存对齐?1.5.3 如何改变结构体内存大小?1. 不修改默认对齐数2. 修改默认对齐数1.6 结构体传参1.7 位段1.7.1 什么是位段?1.7.2 位段的内存分配1.7.3 位段的跨平台问题原创 2022-03-31 19:06:16 · 826 阅读 · 0 评论 -
C语言--字符串操作函数、内存操作函数介绍及模拟实现
文章目录前言一、函数介绍1.1 strlen1.2 strcpy1.3 strcat1.4 strcmp1.5 长度受限制的字符串函数strncpy、strncat、strncmp1.5.1 strncpy1.5.2 strncat1.5.3 strncmp1.6 strstr1.7 strtok1.8 strerror1.9 perror1.10 字符分类函数1.11 memcpy1.12 memmove1.13 memcmp1.14 memset二、库函数模拟实现2.1 模拟实现strlen2.2 模拟原创 2022-03-29 23:20:07 · 1523 阅读 · 2 评论 -
C语言--指针进阶3--这些指针和数组相关的题目你都会做吗?
此章主要记录一些和指针、数组相关的笔试题目。原创 2022-03-27 00:15:42 · 1111 阅读 · 0 评论 -
C语言--指针进阶2--函数指针、函数指针数组、指向函数指针数组的指针、回调函数、qsort()函数示例与模拟实现
文章目录六、函数指针七、函数指针数组7.1函数指针数组的定义7.2函数指针数组的用途--转移表八、指向函数指针数组的指针九、回调函数9.1回调函数演示之一9.2回调函数演示之二(qsort()函数)六、函数指针顾名思义,函数指针就是指向函数的指针,即存放函数地址的指针。void test(){ printf("hehe\n");}int main(){ printf("%p\n", test); printf("%p\n", &test); return 0;}输出结果原创 2022-03-24 18:02:46 · 742 阅读 · 0 评论 -
C语言--指针进阶1--字符指针、数组指针、指针数组、数组传参和指针传参
前言在指针初体验(C语言–指针初体验)中我们简单了解了指针的知识和使用:指针就是个变量,用来存放地址,地址唯一标识一块内存空间。指针的大小是固定的4/8个字节(32位平台/64位平台)。指针是有类型,指针的类型决定了指针的±整数的步长,指针解引用操作的时候的权限。指针的运算。那么从本文开始将记录在深入学习指针过程中的一些课件摘录和学习笔记。一、字符指针二原创 2022-03-24 13:40:19 · 2384 阅读 · 1 评论 -
C语言--数据的存储
目录前言一、数据类型介绍1.1类型的基本分类1.整型家族2.浮点型家族3.构造类型--自定义类型4.指针类型5.空类型二、整形在内存中的存储1.引入库2.读入数据总结前言关于本节数据的存储主要有以下内容:1. 数据类型详细介绍2. 整形在内存中的存储:原码、反码、补码3. 大小端字节序介绍及判断4. 浮点型在内存中的存储解析一、数据类型介绍C语言中,主要的数据类型有:char //(1字节)字符数据类型原创 2022-01-30 10:33:50 · 830 阅读 · 2 评论 -
C语言---初识结构体:结构体的定义、声明、初始化;如何访问结构体成员?结构体传参如何选择?
前言我们在C语言使用过程中,总会遇到需要处理一堆数据的时候,如果这些数据的类型相同,我们可以使用数组解决,但如果这些数据类型不同,就需要用到C语言中的结构体了。那么,什么是结构体?结构体如何使用呢?一、结构体是什么?结构体是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。1.1结构体的声明结构体声明的形式:struct tag{ member-list;//结构体成员}variable-list;//声明的同时定义的结构体变量的列表,变量与变量之间.原创 2022-01-23 17:56:23 · 377 阅读 · 0 评论 -
C语言---指针初体验:什么是指针?什么是野指针?指针类型有什么用?二级指针是什么?
文章目录前言一、指针是什么?二、指针和指针类型2.1指针加或减上一个整数2.2指针的解引用三、野指针四、指针运算五、指针和数组六、二级指针总结前言本文将简要介绍C语言指针如何使用以及使用中的一些注意事项,将围绕指针是什么、指针的类型、野指针、指针运算、指针和数组、二级指针等内容对C语言中遇到的指针进行介绍。提示:以下是本篇文章正文内容,下面案例可供参考一、指针是什么?指针理解的2个要点:1. 指针是内存中一个最小单元的编号,也就是地址2. 平时口语中说的指针,通常指的是指针变量,是用来存放原创 2022-01-23 14:41:11 · 575 阅读 · 3 评论 -
C语言---sizeof()到底是什么?
sizeof是什么?sizeof是C语言的一种单目操作符,如C语言的其他操作符++、–等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。sizeof的使用举例:请看下面的代码:int main(){ char ch = 'o'; short a = 100; int b = 200; long c = 300; long long d = 400; unsigned int e = 5原创 2022-01-22 09:59:01 · 10234 阅读 · 2 评论 -
C语言的函数是什么?--实参、形参是什么?--函数如何定义和声明?--函数的简单使用:1.寻找两数最大值 2.交换两个数的值
C语言函数初了解--实参、形参是什么--函数简单使用:1.寻找两数最大值 2.交换两个数的值原创 2022-01-18 10:28:37 · 390 阅读 · 1 评论 -
C语言-操作符详解3-表达式求值(隐式类型转换、算术转换、操作符属性)
文章目录前言一、隐式类型转换(整型提升)整型提升示例1:整型提升示例2:二、算术转换三、操作符的属性(优先级等)问题/垃圾代码总结前言表达式求值的顺序一部分是由操作符的优先级和结合性决定。同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型。一、隐式类型转换(整型提升)C的整型算术运算总是至少以缺省整型类型的精度来进行的。为了获得这个精度,表达式中的字符(char)和短整型(short)操作数在使用之前被转换为普通整型(int),这种转换称为整型提升。整型提升的意义:表达式的.原创 2022-01-22 00:30:35 · 293 阅读 · 0 评论 -
C语言-操作符详解2-单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员
文章目录前言五、单目操作符六、关系操作符七、逻辑操作符八、条件操作符九、逗号表达式十、下标引用、函数调用和结构成员1.下标引用2.函数调用3. 访问一个结构的成员前言C语言中,操作符主要分为以下几类:1.算术操作符2.移位操作符3.位操作符4.赋值操作符5.单目操作符6.关系操作符7.逻辑操作符8.条件操作符9.逗号表达式10.下标引用、函数调用和结构成员下面,让我们逐一探究。五、单目操作符何为单目操作符?顾名思义,就是使用时只需要一个变量就可以实现的操作符(操作数为1).原创 2022-01-21 16:17:18 · 1096 阅读 · 0 评论 -
C语言-操作符详解1--算术操作符 移位操作符 位操作符 赋值操作符
文章目录前言一、算术操作符二、移位操作符左移右移三、位操作符四、赋值操作符前言C语言中,操作符主要分为以下几类:1.算术操作符2.移位操作符3.位操作符4.赋值操作符5.单目操作符6.关系操作符7.逻辑操作符8.条件操作符9.逗号表达式10.下标引用、函数调用和结构成员下面,让我们逐一探究。一、算术操作符主要是以下几种:加(+) 减(-) 乘(*) 除(/) 取余(%)除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。对于 / 操作符如果两个操作数都为.原创 2022-01-20 19:07:40 · 280 阅读 · 0 评论 -
C语言--数组作为函数参数--实现冒泡排序函数
文章目录前言1 冒泡排序函数的错误设计2 数组名是什么?3 冒泡排序函数的正确设计前言往往我们在写代码的时候,会将数组作为参数传个函数,比如,此处要实现一个冒泡排序函数:将一个整形数组排序。提示:以下是本篇文章正文内容,下面案例可供参考1 冒泡排序函数的错误设计//方法1:#include <stdio.h>void bubble_sort(int arr[]){ int sz = sizeof(arr)/sizeof(arr[0]);//这样对吗? int i原创 2022-01-19 12:27:12 · 1433 阅读 · 0 评论 -
C语言-Day6-数组-一维数组/二维数组
C语言- 数组-一维数组/二维数组数组的创建数组初始化数组的使用数组的内存方式原创 2022-01-19 11:13:18 · 311 阅读 · 0 评论 -
C语言--函数的递归是什么?如何实现函数递归?
C语言--函数递归是什么?如何实现函数递归?图解函数递归原创 2022-01-18 15:06:11 · 593 阅读 · 1 评论 -
C语言-Day4-选择语句(if else/switch)与循环语句(while/for/do while)
文章目录前言一、分支语句(选择结构)1.if else条件语句2.switch条件语句(1)switch中的break(2)switch中的default二、循环语句(循环结构)1.while循环(1)while中的break(2)while中的continue(3)getchar和putchar2.for循环3.do while循环总结前言语句:由分号隔开的就是一条语句。C语句可分为以下五类:1. 表达式语句2. 函数调用语句3. 控制语句4. 复合语句5. 空语句分支语句和循环语句均原创 2022-01-17 01:12:14 · 622 阅读 · 1 评论 -
C语言-Day3-初识函数/数组/操作符/关键字/定义宏
文章目录学习内容:学习时间:学习产出:# 学习目标:提示:这里可以添加学习目标例如:一周掌握 Java 入门知识学习内容:提示:这里可以添加要学的内容例如:1、 搭建 Java 开发环境2、 掌握 Java 基本语法3、 掌握条件语句4、 掌握循环语句学习时间:提示:这里可以添加计划学习的时间例如:1、 周一至周五晚上 7 点—晚上9点2、 周六上午 9 点-上午 11 点3、 周日下午 3 点-下午 6 点学习产出:提示:这里统计学习计划的总量例如:1、 技原创 2022-01-16 10:46:22 · 488 阅读 · 1 评论 -
C语言-Day2-初识作用域/常量的定义/字符串/转义字符/注释
一、作用域:变量的作用域指某一变量在程序中可以被访问的一定区域。在作用域之外,该变量将不可被访问。位于一对花括号内的语句被称为一个代码块。代码块内的变量的作用域为该花括号范围。如下面的语句在编译时将报错。因为a被定义的范围是在内部的花括号内,在此花括号外,变量a无法被访问。int main(){ { int a = 10; } printf("%d",a);}全局变量:定义在花括号外,即int main(){}这个花括号外的变量,称为全局变量,该变量在整个工程中都可以被访问。局部变原创 2022-01-15 16:51:46 · 431 阅读 · 1 评论 -
C语言-Day1-环境搭建安装/创建工程/第一个C代码
文章目录前言一、软件环境搭建与安装二、第一个C语言项目1.创建工程2.编写代码总结前言本系列记录零基础学习C语言过程中的一些笔记。提示:以下是本篇文章正文内容,下面案例可供参考一、软件环境搭建与安装C语言的开发环境还是很好安装的,本次学习过程中使用VS2019作为开发工具用以编写编译C语言代码。可在微软VS官网下载安装包安装即可。二、第一个C语言项目1.创建工程打开VS2019,在控制台选择C++空项目,注意项目名称与路径,都填写自己能找到的。创建成功后需要再新建.c源文件文件,原创 2022-01-12 10:57:08 · 307 阅读 · 1 评论