![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C Primer Plus
C语言学习笔记,欢迎各位交流学习,指正
咖啡与乌龙
这是一个知识分享型宝藏博主,本科测控技术与仪器,研究生仪器科学与技术,自学计算机技术,目前在sangfor担任后台开发工程师,职场新人小菜鸟一枚。欢迎大家关注,相互交流,相互学习,共同进步!!!
展开
-
C语言中的字符串输入输出函数
1. 字符串输入(gets、fgets、gets_s、scanf) a. 分配内存空间 a. 静态内存分配 ○ 指的是在编译时确定数组等数据类型的大小,然后由计算机分配好 ○ 在声明数组时要显式的声明数组的大小,为字符串的输入分配内存空间 ○ char name[81]; b. 动态内存分配 ○ 通俗一点就是向计算机要内存空间,是在程序运行时,再向计算机要内存 ○ 一般是用malloc函数 § #include<stdlib.h> § vo原创 2020-06-29 08:08:33 · 6595 阅读 · 0 评论 -
C Primer Plus 第17章 高级数据表示学习笔记
3. 抽象数据类型(ADT) a. 什么是类型? § 类型特指两类信息:属性和操作 b. 如何定义一种新类型? i. 提供类型的属性和相关操作的抽象描述(ADT) □ (你得告诉其他人新类型如何区分,如何定义,可以进行什么操作?) ii. 开发一个实现ADT的编程接口 □ 对这个类型进行储存方式的确定,以及该如何进行某些操作 iii. 编写代码实现接口 □ 这是一个代码细节的实现,由创建者完成,使用者无需关心细节 c. 示例(C primer plus p1320).原创 2020-07-11 14:48:02 · 239 阅读 · 0 评论 -
C primer Plus 队列咨询建议问题的算法及理解分析
1.程序清单17.9/*C primer plus 程序清单17.9(我将中间一部分按照自己的逻辑进行了一些修改,实现了同样的功能;queue.c和queue.h和书本一样,这里就不放在这了)*//*创建驱动程序用以测试Queue接口是否可以正常工作*/#include "queue.h"#include <stdio.h>#include <stdlib.h>#include <time.h>#define MIN_PER_HR 60.0bool n原创 2020-07-10 11:58:55 · 235 阅读 · 1 评论 -
C预处理器、宏、math.h、#define、#include、内联函数(C99)inline、_Noreturn函数(C11中新增的第二个函数说明符)、 a. exit()和atexit()
原创 2020-07-08 00:07:49 · 276 阅读 · 2 评论 -
C语言的位操作、掩码、位字段、对齐特性
1. 神奇的位操作 a. 作为学仪器仪表的工科生,C语言不仅提供了高级语言的便利,还保留了汇编语言级别的位处理机制,这使得C语言 成为编写设备驱动程序和嵌入式代码的首选2. 二进制补码: a. 负数的补码:将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加13. C语言中的按位运算符 a. 按位逻辑运算符 i. 都用于整型数据,包括char ii. 按位取反~ 1) 1变0,0变1 a) val=10001000,~val=01110111原创 2020-07-06 16:58:22 · 3265 阅读 · 0 评论 -
C语言中的结构、联合、函数指针、typedef、枚举、复杂声明
原创 2020-07-05 21:41:02 · 111 阅读 · 0 评论 -
C primer plus这本书中的自定义获取标准输入(屏幕)字符串函数s_gets函数解析以及程序清单14.2中while(getchar() != ‘\n‘)的不同用法
/*这里主要解释了*//*该函数从屏幕读取n-1个字符,将其中的换行符替换为空字符,成功时返回st,失败时返回NULL指针*/char *s_gets(char *st, int n){ char *ret_val; char *find; /*fgets获取的是一行字符串,遇到换行符或读取到n-1个字符时结束读取,前者将换行符保存进 字符串st,然后再保存一个空字符*/ /*注意字符串中的空格字符不是'\0'*/ ret_val = fgets(st,原创 2020-07-04 15:24:13 · 363 阅读 · 2 评论 -
C语言中的文件输入输出
1.文件 a. 文件是什么? i. 文件是磁盘或者固态硬盘上的一段已命名的存储区 b. 什么是文本文件和二进制文件? i. 文本文件和二进制文件都是计算机文件,在计算机中的物理存储都是二进制的,没有本质的区别; 真正的区别是在逻辑上的,也就是编码层次上的差异。 ii. 文本文件是以ASCII码、Unicode码表示的纯文本文件,只能存储字符信息,不能存储其他信息; 二进制文件主要是图形文件和文字处理程序等计算机程序 iii. 文本文件大多是定长编码,每个字符在具体编原创 2020-07-03 21:27:49 · 694 阅读 · 0 评论 -
cmd命令行返回上一级目录、切换到其他的盘、看一下该目录都有什么文件、打开该目录的某文件、改变命令颜色、快速进入某文件目录的方法
原创 2020-07-02 23:26:29 · 1225 阅读 · 0 评论 -
使用cmd命令行编译c源程序并执行c程序
原创 2020-07-02 23:20:36 · 1181 阅读 · 0 评论 -
文本文件、二进制文件、文本模式、二进制模式
a. 文件是什么?i. 文件是磁盘或者固态硬盘上的一段已命名的存储区b. 什么是文本文件和二进制文件?i. 文本文件和二进制文件都是计算机文件,在计算机中的物理存储都是二进制的, 没有本质的区别;真正的区别是在逻辑上的,也就是编码层次上的差异。ii. 文本文件是以ASCII码、Unicode码表示的纯文本文件,只能存储字符信息,不 能存储其他信息;二进制文件主要是图形文件和文字处理程序等计算机程序iii. 文本文件大多是定长编码,每个字符在具体编码中是固定的;二进制文件是基原创 2020-07-02 17:15:24 · 776 阅读 · 0 评论 -
预编译指令#define、#include、标准头文件结构小析
1. #define编译预处理指令 a. #define <名字> <值> b. 没有结尾的分号,因为不是C的语句 c. 名字必须要有一个是单词,值可以是各种东西 d. C语言中的编译器开始之前,编译预处理程序会把程序中的名字改为值(宏展开) i. 完全的文本替换 e. 宏 i. 如果一个宏的值里面有其他的宏的名字,也是会宏展开的 ii. 如果一个宏的值超过一行,最后一行之前的行末要加反斜杠\ f. 没有值的宏 i. #define _DEBUG ii原创 2020-07-02 15:22:54 · 941 阅读 · 0 评论 -
malloc和free以及C程序中的类型限定符和静态存储、自动存储、动态存储
1. time函数 ○ time函数---time_t time(time_t * timer),参数是一个time_t类型的指针,用于存储返回的时间值,这个参数可以为空 ○ 获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数。2. 动态内存分配malloc()、calloc()和free() ○ 动态内存分配 ○ 通俗一点就是向计算机要内存空间,是在程序运行时,再向计算机要内存 ○ 一般是用malloc函数 § #include<stdlib.h>原创 2020-07-01 14:51:17 · 200 阅读 · 0 评论 -
C语言中的存储类别
记在最前尽量在函数内部解决该函数的任务,除非万不得已不要创建外部变量,只共享那些需要共享的变量。尽量使用默认的自动存储类别。原创 2020-06-30 14:03:04 · 159 阅读 · 0 评论 -
C语言中的strtol函数
1.定义#include <stdlib.h>long int strtol(const char * restrict nptr,char ** restrict endptr,int base);/*base:表示进制比如10-->10进制、2-->2进制、16-->16进制*//*功能:将字符形式的数字nptr按照进制base转换为long int型的整数*//*(**endptr):指向指针的指针==指向一个位置的指针==指向结束转换位置的指针*/2.程序原创 2020-06-29 22:49:24 · 629 阅读 · 0 评论 -
C语言实现字符串排序---算法和程序
```c#include <stdio.h>#include <string.h>#define SIZE 81#define LIM 20#define HALT " "void strsort(char *strings[], int num);char *s_gets(char *s, int n);int main(){ char input[LIM][SIZE]; //用于存输入的字符串数组 char *ptstr[LIM]; .原创 2020-06-29 16:09:39 · 2142 阅读 · 0 评论 -
C语言中指针和字符串的联系与区别小析
/*指针和字符串的联系和区别*/#include <stdio.h>int main(){ const char *mesg = "Don't be a fool!"; //指针形式定义一个字符串 const char *copy; copy = mesg; printf("%s\n", copy); printf("mesg = %s; &mesg = %p; value = %p\n", mesg, &mesg, mesg)原创 2020-06-24 10:23:08 · 542 阅读 · 0 评论 -
C语言中用二维数组定义的字符串数组与用指针数组定义的字符串数组的解析与归纳
1.char a[n][m]:a. a是一个内含n个数组的数组,每个数组的大小为m字节,于是在内存中a占用了(n*m)个字节的空间b. 数组名a具有地址含义,指向第一个拥有m个字符元素数组 注意:此时如果给a赋值,那么字符串的长度不能超过m-1c. 和数组形式定义的字符串相同,数组形式定义的字符串数组,存储了字符串字面量的副本,可以直接对这些字符串进行更改d. 其中每个含有m个元素的数组必须不大不小的将数组填满,如果字符串长度小于m-1,其余位置就补’\0’。e. ps:在初始化时,m绝对不能原创 2020-06-24 09:46:31 · 2003 阅读 · 0 评论 -
C语言中数组形式定义和指针形式定义的字符串的异同
C语言中数组形式定义和指针形式定义的字符串的异同1. char *s=“Hello World!”;1.s是一个指针,他指向了字符串常量,也就是这个字符串常量所在的地址2.指针s是一个指针变量,可以被修改。3.字符串只有一个副本,只能读,不能写,如果试图对s所指的字符串修改,将会出现错误4.这种写法,更准确的说是 const char *s="Hello World!",但是编译器一般会接受没有const的写法2.char s[]=“Hello World!”;1.数组形式中,s是一个地址常原创 2020-06-23 12:50:08 · 493 阅读 · 0 评论 -
C语言中的数组和指针相关知识
定义数组 <类型>变量名称[元素数量] int grades[100];double weight[20];元素数量必须要是整数数组内部的元素需要初始化,默认情况下是随机值 数组的集成初始化(以下三个指令均可以在vscode中可以实现,本机是C11)int a []={2,3,4,6,8,5,8,9,4,2};int b[10]={67}; 这是集成初始化的另一种常见形式:表示b[0]=67,其余的所有元素都是0int a[10]={[0]=2,[2]=3,6}..原创 2020-06-22 19:38:19 · 399 阅读 · 0 评论 -
C语言中的字符串和字符串函数
C语言中的字符串以'\0'或者说是整数0作为结尾的一串字符 0和'\0'是一样的,但是和'0'不同,后者是ASCII码的字符0 0标志字符串的结束,但它不是字符串的一部分 计算字符串的长度时,不包括这个0 字符串以字符数组的形式存在,以数组或者指针的形式访问 不可以用运算符对字符串做运算 一般可以通过数组的方式遍历字符串 字符串变量的多种表现形式 char *str ="Hello";//以指针的形式表现字符串变量 char word[] ="Hello";//以字符数组的原创 2020-06-22 19:41:09 · 514 阅读 · 0 评论 -
C语言的数据类型相关知识点
C语言是有类型的语言 C语言的变量在使用前必须先定义确定类型 C语言之后的语言向两个方向发展 C++/Java更强调类型,对类型的检查更加严格 JavaScript、Python、PHP不看重类型,甚至不需要先定义 C语言需要类型,但是对类型的安全检查并不足够 C语言的类型 整数 char、short、int、long、long long 浮点数 float、double、long double 逻辑 bool 指针 自定义类型原创 2020-06-22 19:09:07 · 509 阅读 · 0 评论 -
C语言中的函数相关知识点
函数的定义 函数是一块代码,接受0个或者多个参数,做一件事情,并返回0个或者一个值,是用于完成特定任务的独立程序代码单元 调用函数 函数名(参数值); 参数表中的参数为形式参数----也即是参数 调用函数时给的值就是实际参数---其实是值 ()起到了表示函数调用的重要作用,即使没有参数也需要() 如果有参数,则需要给出正确的数量和顺序 这些值会被按照顺序依次用来初始化函数中的参数 函数返回 函数知道每一次是哪里调用它,然后返回到...原创 2020-06-22 19:23:12 · 535 阅读 · 0 评论