![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
带你学C带你飞
跟小甲鱼学C语言的笔记
earther19949
这个作者很懒,什么都没留下…
展开
-
《带你学C带你飞》—— SE61 IO缓冲区
最后一节#include <stdio.h>#include <stdlib.h>int main(void){ FILE *fp; if ((fp = fopen("output.txt", "w")) == NULL) { perror("打开文件失败,原因是"); exit(EXIT_FAILURE); } fputs(" I lov...原创 2019-07-22 22:12:14 · 147 阅读 · 0 评论 -
《带你学C带你飞》—— SE60 标准流和错误处理
文件流分为:标准输入(stdin)、标准输出(stdout)、标准错误输出(stderr)重定向:由于标准输出和标准错误输出通常都是直接打印到屏幕上,为了区分它们,可以使用Linux shell的重定向功能——重定向标准输入使用<——重定向标准输出使用>——重定向标准错误输出使用2>错误处理——错误指示器——ferror——使用clearerr函数可以人为地清楚文件...原创 2019-07-22 21:56:06 · 227 阅读 · 0 评论 -
《带你学C带你飞》—— SE59随机读写文件
ftell函数:获取文件位置指示器#include<stdio.h>#include<stdlib.h>int main(void){ FILE *fp; if((fp = fopen("hello.txt", "w")) == NULL) { printf("文件打开失败!\n"); exit(EXIT_FAILURE); } print...原创 2019-07-22 20:28:50 · 327 阅读 · 0 评论 -
《带你学C带你飞》—— SE58读写文件2
利用格式化函数读写文件fprintf、fscanf#include <stdio.h>#include <stdlib.h>#include <time.h>int main(void){ FILE *fp; struct tm *p; time_t t; time(&t); p = localtime(&t); ...原创 2019-07-22 13:54:43 · 874 阅读 · 0 评论 -
《带你学C带你飞》—— SE57 读写文件
利用fetc读取字符,fputc写入字符,实现文件的拷贝:#include <stdio.h> #include <stdlib.h>int main(void){ FILE *fp1; FILE *fp2; int ch; if ((fp1 = fopen("hello.txt", "r")) == NULL) { printf("文件打开失败...原创 2019-07-22 10:41:42 · 763 阅读 · 0 评论 -
《带你学C带你飞》—— SE56打开关闭文件
Everything is a file“读”就是从文件里获取数据,“写”则相反,是将数据写入到文件里面。在完成对一个文件的读写操作之后,你必须将其关闭#include<stdio.h>#include<stdlib.h>int main(void){ FILE *fp; int ch; if((fp = fopen("hello.txt", "r"...原创 2019-07-22 09:52:50 · 405 阅读 · 0 评论 -
《带你学C带你飞》—— SE55移位和位操作应用
移位运算符C语言除了提供四种逻辑位运算符之外,还提供了可以将某个变量中所有的二进制位进行左移或右移的运算符。左移运算符右移运算符移位运算符可以和赋值运算符结合通过移位操作可以改变变量的值对于整型值来说,左移一位值×2,右移一位值÷2,右移两位÷4,例如:#include <stdio.h>int main(void){ int value = 1; whil...原创 2019-07-22 09:25:15 · 287 阅读 · 0 评论 -
《带你学C带你飞》—— SE54位操作
C语言并没有规定一个字节的尺寸、“可寻址的数据存储单位,其尺寸必须可以容纳运行环境的基本字符集的任何成员”逻辑位运算符原创 2019-07-22 08:41:15 · 326 阅读 · 0 评论 -
《带你学C带你飞》—— SE52枚举
枚举————一一列举声明枚举类型enum 枚举类型名称{枚举值名称,枚举值名称…};定义枚举变量enum 枚举类型名称 枚举变量1,枚举变量2;#include <stdio.h>#include <time.h>int main(void){ enum Week {sun, mon, tue, wed, thu, fri, sat}; ...原创 2019-07-19 10:46:32 · 1369 阅读 · 0 评论 -
《带你学C带你飞》—— SE53 位域
位域允许将一个字节拆开来用位域的使用在结构体定义时,在结构体成员后面使用冒号(:)和数字来表示该成员所占的位数。#include<stdio.h>int main(void){ struct Test { unsigned int a:1; //变量a只能存放两个位的数据 unsigned int b:2; //变量b只能存放两个位的数据,如果将b的位...原创 2019-07-19 09:43:18 · 603 阅读 · 0 评论 -
《带你学C带你飞》—— SE51 共用体
共用体共用体和结构体不同共用体是数个变量共用一个地址,如下列程序显示,共用体里变量的地址相同,所以他们变量不能同时使用,一旦同时使用,会出现相互覆盖的情况发生,导致错误#include <stdio.h>#include <string.h>union Test{ int i; double pi; char str[6];};int main(v...原创 2019-07-19 09:27:29 · 284 阅读 · 0 评论 -
《带你学C带你飞》—— SE44传递结构体变量和结构体指针
使用结构体嵌套、结构体函数来写书的信息的程序#include <stdio.h>struct Date{ int year; int month; int day;};struct Book{ char title[200]; char author[40]; float price; struct Date date; char publisher...原创 2019-07-18 14:55:31 · 362 阅读 · 1 评论 -
《带你学C带你飞》—— SE43结构体数组和结构体指针
学习笔记**************/*/因为小甲鱼失联,只好自己写了1. 结构体的嵌套#include <stdio.h>struct Date{ int year; int month; int day;};struct Book{ char title[128]; char author[40]; float price; struct Date...原创 2019-07-18 10:23:38 · 221 阅读 · 0 评论 -
《带你学C带你飞学习笔记》—— SE40高级宏(课后题未完成)
知识点回顾1. 宏定义的本质再牛逼的宏定义,说到底也是机械替换2. C语言三大预处理功能宏定义、文件包含、条件编译3.不带参数的宏定义宏定义分为带参数和不带参数两种情况,不带参数的情况就是我们熟悉的直接替换操作。例如;#define PI 3.14这个宏定义的作用是把程序中出现的PI在预处理阶段全部替换成3.14.4. 带参数的宏定义C语言允许宏定义带有参数,在宏定义中的参...原创 2019-07-17 20:55:57 · 949 阅读 · 0 评论 -
《带你学C带你飞学习笔记》—— SE39C语言的内存分布(课后题未完成)
知识点回顾1. C语言的内存布局规律可以看到局部变量的地址是占据高地,接着是malloc函数的动态内存空间,然后是全局变量和静态局部变量。不过这两者都需要区分是否有已经初始化,已经初始化的放一块,未初始化的放一块,并且未初始化的地址要比初始化的要更高一些。接着下来是字符串常量,最后是函数的地址。2. 典型的C语言程序的内存空间划分根据内存地址从低到高分别划分为:代码段(Text ...原创 2019-07-17 15:35:54 · 593 阅读 · 0 评论 -
《带你学C带你飞学习笔记》——SE38动态内存管理2
知识点回顾原创 2019-07-16 21:28:04 · 304 阅读 · 0 评论 -
《带你学C带你飞学习笔记》——SE37动态内存管理1
知识点回顾1. 动态内存管理的几个函数malloc -- 申请动态内存空间free -- 释放动态内存空间calloc -- 申请并初始化一系列内存空间realloc -- 重新分配内存空间2. 内存泄漏导致内存泄漏主要有两种情况: 隐式内存泄漏(即用完内存块没有及时使用free函数释放) 丢失内存块地址...原创 2019-07-16 13:56:47 · 277 阅读 · 0 评论 -
《带你学C带你飞学习笔记》—— SE33生存期和存储类型
知识点备忘1. 生存期C语言的变量拥有两种生存期,分别是静态存储器(static storage duration)和自动存储器(automatic storage duration)。具有文件作用域的变量具有静态存储期(比如全局变量),函数名也拥有静态存储器。具有静态存储期的变量在程序执行期间将一直占据存储空间,直到程序关闭才释放;具有代码块作用域的变量一般情况下具有自动存储期(比如局部变...原创 2019-07-16 09:49:12 · 365 阅读 · 0 评论 -
《带你学C带你飞学习笔记》—— SE32作用域和连接属性
知识点回顾(版权属于fishc.com)1.作用域上一讲我们是从变量的作用域角度将变量划分为局部变量和全局变量,这是从空间的角度来分析的。我们发现当变量被定义在程序的不同位置时,它的作用范围是不一样的。这个范围就是我们说的作用域。c语言编译器可以确认4种不同类型的作用域:代码块作用域、文件作用域、原型作用域、函数作用域。1.1 代码块作用域(block scope)最常见的就是代码块作用...原创 2019-07-15 17:03:02 · 536 阅读 · 0 评论 -
《带你学C带你飞学习笔记》—— SE31局部变量和全局变量
知识点回顾局部变量在开始讲解函数之前,我们所理解的变量就是在内存中开辟一个存储数据的位置,并给它起个名字。因为那时候只有一个 main 函数,所以那时我们对它的作用范围一无所知,觉得定义了变量就随时随地可以使用它……直到我们学习函数才发现,不同函数之间定义的变量,它们是无法相互进行访问的。C99 新标准C99 标准允许在 for 语句的第一个表达式部分声明变量,它的作用范围仅限于复...原创 2019-07-15 16:08:06 · 384 阅读 · 0 评论 -
《带你学C带你飞》——冒泡排序
**冒泡排序(Bubble Sort)**是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序通俗易懂,适合初次接触排序算法的童鞋学习。不过冒泡排序的效率算比较低的,如果你尤其喜欢冒泡排序,还可以...原创 2019-08-19 11:11:34 · 154 阅读 · 0 评论 -
《带你学C带你飞学习笔记》—— SE30指针函数和函数指针
测试题:0. 函数名在表达式中应该如何被解读?函数指针和指针函数有什么区别?答:函数指针是指向函数的指针,在函数调用的时候可以通过调用函数指针的方式来调用函数。而指针函数是在函数里操作指针的函数。正解:函数名可以在表达式中被解读成“指向该函数的指针”。2. 一个函数能否有时候返回整型指针,有时候返回字符指针?答:应该不可以吧,因为函数指针的定义的时候已经确定了返回类型了吧。3....原创 2019-07-15 13:39:02 · 396 阅读 · 0 评论 -
《带你学C带你飞学习笔记》—— SE29参数和指针
函数的设计应该遵从什么原则?答:函数的设计应该包括函数的声明、函数的定义、函数的调用;1.“形参和实参,只是放在不同位置的同一个变量。”,这种说法正确吗?答:不对,形参只有在函数定义里有作用,当出了函数体,形参什么也算不上。void 类型的函数能否使用 return 语句返回?答:实际上void类型的函数是没有返回值的函数类型,但是你如果非要写一些return,编译器也不会报错。...原创 2019-07-14 17:04:34 · 541 阅读 · 0 评论 -
《带你学C带你飞学习笔记》—— SE28函数初体验
请按顺序标示出指定语句的执行顺序(如 A -> B -> C -> D)#include <stdio.h>void a();void b();void c();void a(){ ; // A}int main(){ b(); // B a(); // C c(); // D...原创 2019-07-13 21:06:40 · 196 阅读 · 0 评论 -
《带你学C带你飞学习笔记》—— SE27常量和指针
知识点回顾1. const 关键字在 C 语言中,有一种能力可以将变量变成具有常量一样的特性。这就是 —— const 关键字。在它的修饰下,变量就会失去可修改的特性,也就是变成只读的属性。const int price = 520;const char a = 'a';const float pi = 3.14;2. 指向常量的指针万能的指针当然也可以指向被 const 修饰过...原创 2019-07-13 14:48:58 · 322 阅读 · 0 评论 -
《带你学C带你飞学习笔记》—— SE26指向指针的指针
知识点回顾:指向指针的指针只要你懂得了指针的概念,那么指向指针的指针也就没什么了不起了。举个栗子:#include <stdio.h>int main(){int num = 520;int *p = #int **pp = &p; …… return 0;}复制代码上边代码中,p 定义的是指向整型的指针,也就是说指针变量 p 里...转载 2019-07-10 08:25:17 · 538 阅读 · 0 评论 -
《带你学C带你飞学习笔记》—— SE25void指针和NULL指针
动口不动手0.#include <stdio.h>int main(){ void a; printf("%d\n", sizeof(a)); return 0;}答:会报错。1.那 sizeof(void *) 呢?答:不会报错。并且会打印8。2. 如何有效地避免出现悬空指针?答:尽量师出有名,及时定义,或使...原创 2019-07-08 20:13:47 · 198 阅读 · 0 评论 -
《带你学C带你飞学习笔记》—— SE24指针和二维数组
思考题0. 君子动口不动手#include <stdio.h>int main(){ char matrix[3][5] = { 'I', 'l', 'o', 'v', 'e', 'F', 'i', 's', 'h', 'C', '.', 'c', 'o', 'm'...原创 2019-07-08 14:48:20 · 258 阅读 · 0 评论 -
《带你学C带你飞学习笔记》—— SE23指针数组和数组指针(未完成)
请问 str[3] 和 *(str + 3) 是否完全等价?答:不完全等价,前者表示数组,后者表示数组指针。请问下边代码是否可以正常执行?如果可以,会打印什么值?如果不行,请说明原因? #include <stdio.h> int main() { int a[5] = {1, 2, 3, 4, 5}; int *b...原创 2019-07-03 16:45:34 · 421 阅读 · 0 评论 -
《带你学C带你飞学习笔记》—— SE22指针和数组
str[3] 用指针法如何表示?假设整型指针变量 p 存放的地址值是 0x11008888,那么请问 p + 1,p + 2,p + 4 和 p + 8 的地址分别是?请问 str[20] 是否可以写成 20[str]?你能猜出下边关键代码段是用于干啥的吗?while (n-- && (*target2++ = *target1++) != '...原创 2019-07-01 13:30:47 · 532 阅读 · 0 评论 -
《带你学C带你飞学习笔记》—— SE21指针
通常程序猿口中的“指针”,指的是什么东西?答:变量存放的地址指针变量只能存放地址吗?答:是的请问 int * a, b, c; 定义了多少个指针变量?答:只定义了一个指针变量a;请问 int *(a, b, c); 定义了多少个指针变量?答:三个变量:a、b、c。答:我觉得都有可能。你觉得将取址运算符(&)作用于一个常数,然后试图打印该常数在内存中的...原创 2019-06-29 22:41:20 · 425 阅读 · 0 评论