![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C&C++
文章平均质量分 52
C&C++
Jacob0707
这个作者很懒,什么都没留下…
展开
-
变量名前加下划线
在C语言中,以单下划线(_)表明是标准库的变量,双下划线(__) 开头表明是编译器的变量。原创 2021-12-21 16:53:25 · 1522 阅读 · 0 评论 -
《C和指针》笔记(十二)
(十二)使用结构和指针单链表typedef struct NODE { struct NODE *link; int value;} Node;#include <stdlib.h>#include <stdio.h>#include "sll_node.h"#define FALSE 0#define TRUE 1int sll_insert(register Node **linkp, int new_value){ register Nod原创 2021-06-12 11:05:22 · 68 阅读 · 0 评论 -
《C和指针》笔记(八)
(八)数组一维数组数组名的值是一个指针常量,也就是数组第1个元素的地址。只有当数组名在表达式中使用时,编译器才会为它产生一个指针常量。注意这个值是指针常量,而不是指针变量。只有在两种场合下,数组名并不用指针常量来表示——就是当数组名作为sizeof操作符或单目操作符&的操作数时。sizeof返回整个数组的长度,而不是指向数组的指针的长度。取一个数组名的地址所产生的是一个指向数组的指针,而不是一个指向某个指针常量值的指针。 int a[2] = {1, 2}; int b =原创 2021-06-08 21:40:43 · 69 阅读 · 0 评论 -
《C和指针》笔记(十五)
(十五)输入输出函数就C程序而言,所有的IO操作只是简单地从程序移进或移出字节的事情。这种字节流便被称为流。绝大多数流是完全缓冲的,“读取”和“写入”实际上是从一块被称为缓冲区的内存区域来回复制数据。流分为两种类型,文本流和二进制流。文件stdio.h所包含的声明之一就是FILE结构。FILE是一个数据结构,用于访问一个流。如果你同时激活了几个流,每个流都有一个相应的FILE与它关联。对于每个ANSI C程序,运行时系统必须提供至少三个流——标准输入、标准输出、标准错误。这些流的名字分别为std原创 2021-06-13 11:50:00 · 77 阅读 · 0 评论 -
《C和指针》笔记(九)
(九)字符串、字符和字节C语言并没有显式的字符串数据类型,因为字符串以字符串常量的形式出现或者存储于字符数组中。字符串常量很适用于那些程序不会对它们进行修改的字符串。NUL字节是字符串的终止符,但它本身并不是字符串的一部分,所以字符串的长度并不包括NUL字节。char *strcpy(char *dst, char const *src);这个函数把参数src字符串复制到dst参数。由于dst参数将进行修改,所以它必须是个字符数组或者是一个指向动态分配内存的数组的指针,不能使用字符串常量。即使新的原创 2021-06-09 09:43:53 · 118 阅读 · 0 评论 -
《C和指针》笔记(五)
(五)操作符和表达式<< : 左移位操作符>> : 右移位操作符& : AND| : OR^ : XOR单目操作符:~ : 求补运算,1变为0,0变为1! : 逻辑反操作,产生一个整型结果,0或1- : 产生操作数的负值+ : 什么也不干& : 产生它的操作数的地址。* : 间接访问操作符,它与指针一起使用,用于访问指针所指向的值。sizeof : 判断它的操作数的类型长度,以字节为单位表示。//sizeof(int原创 2021-06-05 17:12:32 · 50 阅读 · 0 评论 -
《C和指针》笔记(十一)
(十一)动态内存分配数组的元素存储于内存中连续的位置上。当一个数组被声明时,它所需要的内存在编译时就被分配,但是你也可以使用动态内存分配在运行时为它分配内存。malloc 和 freeC函数库提供了两个函数,malloc和free,分别用于执行动态内存分配和释放void *malloc(size_t size); /* size为需要分配的内存字节数*/void free(void *pointer); 调用malloc函数时,malloc从内存池中提取一块合适的内存,并向该程序返回一个指向这原创 2021-06-11 21:07:18 · 61 阅读 · 0 评论 -
《C和指针》笔记(六)
(六)指针值与类型变量名abcde地址上内容112-11078523331100108int a = 112, b = -1;float c = 3.14;int *d = &a;int *e = &c;c所存储的是浮点值,可是在地址上的内容却是一个整数?因为该变量包含了一系列内容为0或者1的位。它们可以被解释为整数,也可以被解释为浮点数,这取决于它们被使用的方式。不能简单地通过检查一个值的位来判断它的类型,必须观察程序中这个值的使原创 2021-06-06 18:02:09 · 44 阅读 · 0 评论 -
《C和指针》笔记(四)
(四)语句空语句空语句本身只包含一个分号。它所适用的场合是语法要求出现一条完整的语句,但并不需要它执行任何任务。表达式语句C并不存在专门的“赋值语句”,赋值就是一种操作,就像加法和减法一样,就在表达式内进行。例:x = y + 3;ch = getchar();实际上是表达式语句,而不是赋值语句。y + 3;getchar();这两条语句也完全合法,但它们并未使用赋值操作符。a++;这条语句并没有赋值操作符,但它却是一条非常合理的表达式语句。++操作符将增加变量a的值,这就是它的副原创 2021-06-05 17:11:30 · 58 阅读 · 0 评论 -
《C和指针》笔记(十)
(十)结构和联合结构基础知识数组元素可以通过下标访问,这只是因为数组的元素长度相同。但是,在结构中由于一个结构的成员可能长度不同,所以不能使用下标来访问它们。相反,每个结构成员都有自己的名字,它们是通过名字访问的。当一个结构变量在表达式中使用时,它并不被替换成一个指针。你可以声明指向结构的指针,取一个结构变量的地址,也可以声明结构数组。struct tag { member-list } variable-list ;结构声明 struct{ int a;原创 2021-06-10 21:49:33 · 140 阅读 · 0 评论 -
《C和指针》笔记(三)
(三)数据基本数据类型在C语言中,仅有4种基本数据类型——整型、浮点型、指针和聚合类型(如数组和结构等)。所有其他的类型都是从这4种基本类型的某种组合派生而来。长整型至少应该和整形一样长,而整型至少应该和短整型一样长。指针只是地址的另一个名字,指针变量就是一个其值为另外一个内存地址的变量。C语言提供了字符串常量,它就是一串以NUL字节结尾的零个或多个字符。由于NUL字节是用于终结字符串的,所以在字符串内部不能有NUL字节。用于修改变量的长度或是否为有符号数的关键字:short long sign原创 2021-06-03 20:39:07 · 100 阅读 · 0 评论 -
C++内存模型
头文件中常包含的内容:函数原型使用#define或const定义的符号常量结构声明类声明模板声明内联函数不同的编译器名称修饰的方式可能不同,可能为同一个函数生成不同的修饰名称。名称的不同将使链接器无法将一个编译器生成的函数调用与另一个编译器生成的函数定义匹配。在链接编译模块时,请确保所有对象文件或库都是由同一个编译器生成的。如果有源代码,通常可以用自己的编译器重新编译源代码来消除链接错误。存储持续性、作用域和链接性C++使用不同的方案来存储数据:自动存储持续性静态存储持续性线程原创 2021-06-25 22:03:01 · 82 阅读 · 0 评论 -
C++函数相关
程序编译之后的最终产品是可执行程序——由一组机器语言指令组成。运行程序时,操作系统将这些指令载入到计算机内存中,因此每条指令都有特定的内存地址。计算机随后将逐步执行这些指令。执行到函数调用指令时,程序将在函数调用后立即存储该指令的内存地址,并将函数参数复制到堆栈,跳到标记函数起点的内存单元,执行函数代码,然后跳回到地址被保存的指令处。内联函数使用内联函数时,编译器将使用相应的函数代码替换函数调用,如果程序在10个不同的地方调用同一个内联函数,则该程序将包含该函数代码的10个副本。内联函数的运行速度比常原创 2021-06-25 11:24:35 · 66 阅读 · 0 评论 -
如何定义一个只能在堆上(栈上)生成对象的类?
只能在堆上方法:将析构函数设置为私有原因:C++ 是静态绑定语言,编译器管理栈上对象的生命周期,编译器在为类对象分配栈空间时,会先检查类的析构函数的访问性。若析构函数不可访问,则不能在栈上创建对象。只能在栈上方法:将 new 和 delete 重载为私有原因:在堆上生成对象,使用 new 关键词操作,其过程分为两阶段:第一阶段,使用 new 在堆上寻找可用内存,分配给对象;第二阶段,调用构造函数生成对象。将 new 操作设置为私有,那么第一阶段就无法完成,就不能够在堆上生成对象。参考:https原创 2021-09-23 16:35:52 · 94 阅读 · 0 评论 -
C++虚基类
虚基类中带有纯虚函数,而带有纯虚函数的类也叫抽象类。抽象类被继承后,子类可以继续是抽象类,也可以是普通类。虚基类如果被继承,那么子类就必须实现虚基类里面的所有纯虚函数,其子类不能是抽象类。...原创 2021-09-23 16:34:16 · 165 阅读 · 0 评论