随笔分类 - 未归类常用笔记
记录一些东西用于查询,并在适当时候归于其他类
摘要:C++函数重载机制导致函数名变化 当我们在一个C语言头文件test.h中声明了一个C函数show(),而在C++的源文件中导入该头文件并使用show时,会报错,链接时错误,函数名无法解析之类的。这是因为C++中会改变编译器会适当改变函数名,因此C中的函数名在C++编译器下改变了,所以找不到。 这个时
阅读全文
摘要:内联函数引入 C中对于一些频繁计算的短代码,通常写成宏来避免函数调用开销,但是再C++中会带来一个问题,即: 预处理器不能访问类的成员,因此宏不能作为类的成员函数。 c++中内联函数就用用来解决宏函数的缺陷。 C++用inline关键字来解决宏函数缺陷的问题 无论是在内联函数还是定义时都要加上inl
阅读全文
摘要:const全局变量 cpp和c中的const全局变量都是放在常量区的,因此一定是不可以修改的 但是C语言中const全局变量默认是外部链接的,即可以跨文件使用,在一个文件里const int a = 10,在另一个文件中可以直接extern const int a声明一下即可使用。 CPP则默认是内
阅读全文
摘要:条件编译基本概念 一般情况下,源代码中所有行都参与编译,但有时希望对部分源代码行只在满足一定条件时才编译,即对这部分源代码行指定编译条件。 如下例子,当加上 #define FLAG这一行时,会编译第一个函数,当去掉这一行时,会编译第二个函数。 条件编译实现格式 条件编译应用 防止头文件重复包含 如
阅读全文
摘要:#include<>和#include""区别 ""表示先在file.c所在的当前目录找头文件file.h,若找不到,再按系统指定的目录检索。 <>直接按系统指定的目录检索 宏常量 不带参数的宏定义(宏常量) 比如 #define PI 3.1415 宏名一般大写 宏定义可以是常数、表达式 宏定义不
阅读全文
摘要:函数指针 一个函数在编译时被分配一个入口地址,这个地址称为函数指针,函数名就代表函数的入口地址(类似数组名,不用&,函数名本身就代表函数的入口地址)。 函数指针定义需要包含两个要素,一个是函数的返回值,一个是函数参数。因此定义执行函数的指针时应该包含这两个要素。 定义函数指针一般通过两个步骤: **
阅读全文
摘要:流 流是一个动态的概念,把一个字节比喻成一滴水,则字节在设备、文件、程序之间的传输就是流,类似于水在管道中的传输,流是对输入输出的一种抽象,也是对传输信息的一种抽象。 程序只关心是否正确输入了要读取的字节数据,特定IO设备的细节对程序员是隐藏的。 文本流 文本流即以文本模式读取文件。文本流特定在不同
阅读全文
摘要:结构体偏移量 结构体偏移量指的是结构体每个成员相对于结构体整体的首地址的一个偏移量,因此,第一个成员的偏移量肯定为0。 知道某个成员的偏移量,再知道该成员的类型,就可以很方便地通过解引用来取出该成员。 结构体字节对齐 使用sizeof计算结构体变量占用空间时,不能将结构体中所有成员占用空间简单相加。
阅读全文
摘要:栈帧 在程序运行时,用栈保存一个函数调用所需要维护的信息,这被称为一个函数的栈帧或者活动记录,一个函数调用过程通常需要以下几方面信息: ** 函数返回地址 ** 函数参数 ** 临时变量 ** 保存的上下文:包括函数调用前后需要保持不变的寄存器 栈的生长方向 向下生长 即栈顶元素的地址最小,后入栈的
阅读全文
摘要:
阅读全文
摘要:磁盘文件与设备文件 文件大体上可以分为两类,一类是磁盘文件,一类是设备文件。 磁盘文件 磁盘文件是指通常存储在外部介质比如磁盘上的数据,通常只有在使用时才调入内存。 磁盘文件又可以分为文本文件和二进制文件,虽然在物理上都是以二进制的方式存储的,但是文本文件和二进制文件的编码格式不同。 文本文件 文本
阅读全文
摘要:memset() 需要注意的是参数n代表的是字节数,而不是元素数,如下边例子,指针p的类型是int,但是用memset填充的时候的单位是字节,所以,此时只有所有字节置零是有效的操作,如果置1的话就会造成int型存储区域的四个字节是10101010,这样得出来的结果必然不是1。 memset()函数的
阅读全文
摘要:C语言作用域 一共分为三种: ** 代码块作用域,即一个单独的{}抱起来的代码块部分 ** 函数作用域,函数内部代码块 ** 文件作用域,一个.c或.h文件内部 全局变量与局部变量 局部变量就是在{}中的变量,比如函数中定义的,或者形参等。其生命周期即从创建到函数结束。 全局变量即不再任何{}中的变
阅读全文
摘要:例1,函数中的字符数组 当前例子中,func函数中定义了一个字符数组,它的创建位置在栈区,因此当func函数返回后该字符数组就被销毁了,因此以下方式主函数中不能成功打印出字符串。 点击查看代码 #include<stdio.h> char * func(){ char a[] = "hello wo
阅读全文
摘要:野指针 指向未知的内存地址 空指针 p = NULL 空指针一般用于条件判断的时候使用,即一个指针使用之后可以赋值为NULL,然后用作条件判断。 空指针其实也有指向的地址,就是0地址处。 万能指针 void * = &a,void * 是万能指针,可以指向任何的数据类型,然后如果想通过该指针操作数据
阅读全文
摘要:int main(int argc, char *argv[]) argc:main函数接收的参数个数 argv:以字符串形式存储了main函数接收到的具体参数,其中argv[0]的值为可执行文件的名称。
阅读全文
摘要:即头文件.h中声明函数和变量,被调函数写在特定的.c文件中,主函数所在的.c主文件一般名字与头文件相同。 为防止头文件重复包含有两种解决方案:
阅读全文
摘要:函数分类 C语言中,可以分为系统函数和自定义函数两种。 系统函数,即C语言库函数,这是由编译系统提供的(编译系统是系统软件,提供了一系列二进制的库文件),可以直接使用,前提是要导入相关的头文件。 自定义函数就是自己定义的普通函数啦。 函数声明 如果自定义的函数在main函数的下边,则可能识别不到,这
阅读全文
摘要:gets() && puts() 点击查看代码 #include<stdio.h> int main(){ char str[100]; gets(str); puts(str); return 0; } /* char *gets(char *s) 功能:从标准输入读入字符,保存到指针s指定的空间
阅读全文
浙公网安备 33010602011771号