跟着小甲鱼学C语言
Ordinary_Bird
这个作者很懒,什么都没留下…
展开
-
【跟着小甲鱼学C语言】P42 结构体
结构体1.结构体的定义定义一个书籍结构体,它包括书籍的名称、作者,价格、上市时间、出版社:#include<stdio.h>struct Book{ char title[120]; char author[40]; float price; unsigned int date; char publisher[40];}int main(void){ r...原创 2019-09-12 19:46:31 · 346 阅读 · 0 评论 -
【跟着小甲鱼学C语言】拾遗
拾遗1.static和const区别const的意思是“常量”,也就是说变量一旦被定义就不能被修改,即是说变量是一个右值。static的意思有两层。第一层是当它作用在函数名或者全局变量上时,这时static关键字会把这两者的extern链接属性修改为internal。第二层是当static作用在局部变量上时,存放这个局部变量的内存空间在被定以后就不会释放,哪怕重新定义这个变量也不行,直到程序...原创 2019-09-12 19:06:31 · 865 阅读 · 0 评论 -
【跟着小甲鱼学C语言】P41 内联函数和预处理运算符
内联函数1.什么是内联函数c语言在调用函数的时候会在代码段内跳来跳去,并且多次调用一个函数会重复申请内存的栈空间。为了解决这个问题,就可以使用内联函数。内联函数和宏定义类似,会直接把函数的代码直接替换到相应的位置,这样程序就不用重复申请栈空间和不停跳转了。内联函数可以用incline关键字来定义,不过现在的编译器都很智能,会自动识别哪些函数需要被转换成内联函数,不需要我们操心。2.预处理运算...原创 2019-09-11 21:57:34 · 178 阅读 · 0 评论 -
【跟着小甲鱼学C语言】P40 高级宏定义
高级宏定义1.不带参数的宏定义一般来说宏定义我们约定俗称都使用大写字母。宏定义末尾不能打分号。可以用 #undef 宏定义名 来终止宏定义的作用范围。宏定义可以用表达式来定义,而且可以嵌套使用,如下:2.带参数的宏定义#define MAX(x,y) (((x)>(y)) ? (x) : (y)) 定义了带两个参数的宏MAX,它是X和Y中较大的那个。这种用法看起来很像函数...原创 2019-09-11 15:18:01 · 202 阅读 · 0 评论 -
【跟着小甲鱼学C语言】P39 C语言的内存布局
C语言的内存布局1.堆和栈堆一般是由程序员指定分配的内存空间,其内地址由小到大分配。而栈是由系统自动分配,其内地址由大到小分配。2.一道题#include <stdio.h>int main(void){ char a = 0, b = 0; int *p = (int *)&b; *p = 258; ...原创 2019-09-10 23:05:36 · 399 阅读 · 0 评论 -
【跟着小甲鱼学C语言】P37 动态内存管理
动态内存管理1.malloc其原型是void *malloc(size_t size);,它用来分配一个固定大小的内存空间,并返回一个指向这个内存空间的void类型指针,所以在使用它的返回值时,最好加上强制指针类型转换再赋值。注意,这个分配好的空间是位于内存的堆上。注意,不要用指向分配好的内存块的指针去指向其他变量,这会导致内存块地址的丢失,会导致内存泄漏。还有每次用完malloc函数,因为有...原创 2019-09-10 22:34:21 · 240 阅读 · 0 评论 -
【跟着小甲鱼学C语言】P33 生存周期和存储类型
生存周期和存储类型1.static关键字使用static关键字作用在具有文件作用域的标识符上,其作用是修改这个标识符的external作用域为internal。但是如果static是作用在局部变量上,那么它的意思就是修改这个局部变量为静态局部变量,即是说这个变量一但被定义,存储它的内存空间直到程序结束才会被释放。...原创 2019-09-04 21:45:13 · 125 阅读 · 0 评论 -
【跟着小甲鱼学C语言】P32 作用域和链接属性
作用域和链接属性1.链接属性链接属性有三种,internal,external和none。internal表示这个标识符可以被多个文件访问,internal表示只能被本文件访问。默认情况下,具备文件作用域的标识符(比如函数名、全局变量)拥有 external 属性。所以只要函数有声明,其他文件就可以访问,但是如果其他文件要访问全局变量还是需要加上external关键字再声明一次。使用 sta...原创 2019-09-04 21:09:13 · 213 阅读 · 0 评论 -
【跟着小甲鱼学C语言】P31 局部变量和全局变量
局部变量和全局变量1.全局变量定义在main函数外的变量就是全局变量。与其他变量不同的是,如果不初始化全局变量,其会自动初始化为0。如果main函数中声明了同名的变量,那么全局变量会被屏蔽。2.extern关键字当变量在定以前就被使用的时候,可以使用extern关键字告诉编译器,这个变量已经在后边定义过了。...原创 2019-09-04 20:35:05 · 202 阅读 · 0 评论 -
【跟着小甲鱼学C语言】P30 指针函数和函数指针
指针函数和函数指针1.如何在函数中改变传入的实参的值只需要把函数的形参写成指针就可以了,这种情况下形参在传入的时候相当于传入的是它的地址,函数在修改值的时候会直接找到这个地址,去改这个内存地址中的值,所以会吧实参的值给修改掉,而不会像使用普通参数的函数一样,局部参数用完就释放,跟外部没有任何关系。2.指针函数其实没什么特别的,指针函数就是返回值为一个指针的函数,需要注意的只有一点,就是不要...原创 2019-09-03 22:05:42 · 385 阅读 · 0 评论 -
【跟着小甲鱼学C语言】P26 指向指针的指针
指向指针的指针1.如何定义和解引用定义:int num = 10;int *p = #int **pp = &p 解引用:printf("%d\n",**pp);原创 2019-08-21 17:03:50 · 157 阅读 · 0 评论 -
【跟着小甲鱼学C语言】P25 void指针和NULL指针
void指针和NULL指针1.void指针void类型不能用来定义变量,但可以用来定义指针。void *p;并且void指针可以指向任何类型的数据。但是,不能直接用*解引用void指针,所以一般要用强制类型转换之后才能解引用void指针。2.NULL指针NULL指针就是不指向任何数据的指针,其实是一个宏定义:#define NUll ((void *)0)NULL指针主要是用来...原创 2019-08-21 16:17:05 · 186 阅读 · 0 评论 -
【跟着小甲鱼学C语言】P24 指针和二维数组
指针和二维数组1.关于二位数组的名字int array[5][6] = {0};定义了一个二位数组array,这个array是一个指向五个元素的行指针常量。我们知道 *(array+1) == array[1]代表的是这个二维数组第二行的名字,换句话说,代表的是array[1]这个一维数组的名字,也就是普通的指针常量。注意这里*并没有取值的意思,而只是一个语法糖,把一个行指针常量降级成为了普通...原创 2019-08-21 15:46:39 · 260 阅读 · 0 评论 -
【跟着小甲鱼学C语言】练习总结:利用结构体数组存放书籍信息
一个练习的总结练习的目标:写一个程序,利用结构体建立一个数据库存放图书数据。下面是代码:#include<stdio.h>#include<stdlib.h>struct Book{ char title[120]; char author[40]; float price; unsigned int date; char publisher[40];...原创 2019-09-12 21:17:59 · 1660 阅读 · 0 评论 -
【跟着小甲鱼学C语言】P23 数组指针和指针数组
数组指针和指针数组1.指针和数组名的区别指针是一个变量,这个变量里面存放的内容是一个内存地址。而数组名可以看成是一个地址常量,它不是左值,不能被修改,所以不能用“++”这样的操作符去操作它。2.什么是指针数组int *p1[5]就定义了一个指针数组,就是定义了一个指针数组。指针数组本质是一个数组,但这个数组的每一个元素都是一个指针,即是说可以理解为,指针数组是每个元素的内容都是一个内存地...原创 2019-08-20 22:47:16 · 420 阅读 · 2 评论 -
【跟着小甲鱼学C语言】练习总结:用单链表存放一个数组
还是一个练习的总结写一个程序用单链表来实现存放一个数组。其中包括单链表节点的定义、用户输入节点的内容、使用头插法输入数据、显示已经输入的数据等几个功能。代码如下:#include<stdio.h>#include<stdlib.h>//定义单链表节点的结构,它是由一个整形数字和一个指针构成struct NumArray{ int num; struct ...原创 2019-09-14 15:13:44 · 1317 阅读 · 0 评论 -
【跟着小甲鱼学C语言】P49 typedef关键字
typedef关键字1.typedef的作用typedef 最基础的作用在于起别名。例如typedef int interger;就是给int起了一个别名。在一些应用场景中,起别名可以让程序看起来更加直观。typedef也可以一次性起多个别名:typedef int integer,*pinteger;这句话为int起了两个别名,但是注意其中pinteger是一个指针,一定要注意为指针...原创 2019-09-14 19:08:19 · 130 阅读 · 0 评论 -
【跟着小甲鱼学C语言】P51 共用体
共用体1.什么是共用体定义结构体变量时,把struct关键字换成union就会定义一个共用体变量。共用体变量中的每个成员共享一个内存地址。原创 2019-09-15 20:34:45 · 198 阅读 · 0 评论 -
【跟着小甲鱼学C语言】P52 枚举类型
枚举类型1.枚举类型的定义使用enum关键字来定义枚举类型:enum Color {red, green, blue};enum Color color;这段代码就定义了一个枚举类型Color,并且定义了一个这个类型的枚举变量color,color的值只有三种可能,就是red、green或者blue,所以叫枚举类型。2.枚举类型的特征枚举类型中的值其实都是整型,所以枚举类型是可以用...原创 2019-09-15 20:58:35 · 191 阅读 · 0 评论 -
【跟着小甲鱼学C语言】P53 位域
位域1.什么是位域有些数据在存储时并不需要占用一个完整的字节,只需要占用一个或几个二进制位即可。例如单片机开发中的开关只有通电和断电两种状态,用 0 和 1 表示足以,也就是用一个二进位。正是基于节省内存空间的考虑,C语言提供了一种叫做位域的数据结构。举个例子:struct bs{ unsigned m; unsigned n: 4; unsigned char ch...原创 2019-09-15 21:22:03 · 194 阅读 · 0 评论 -
【跟着小甲鱼学C语言】P54 位操作
位操作1.有哪些位操作运算符共有四个:& 按位与,| 按位或,^ 按位异或, ~ 按位非。还可以和 = 结合起来使用。&=、|=、^=,但是注意没有~=。原创 2019-09-15 21:32:46 · 151 阅读 · 0 评论 -
【跟着小甲鱼学C语言】P56 文件操作
位操作1.打开和关闭文件打开和关闭文件如下面代码所示:#include<stdio.h>#include<stdlib.h>int main(void){ FILE *fp; char ch; if((fp = fopen("test.txt","r")) == NULL) { printf("failure\n"); exit(1); }...原创 2019-09-15 22:26:14 · 329 阅读 · 0 评论