![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
文章平均质量分 75
程序员小明丶
这个作者很懒,什么都没留下…
展开
-
结构体对齐和补齐(详细解释)
struct sum{ char a[18]; double b; char c; int d; short e;}原创 2019-08-16 17:28:25 · 9284 阅读 · 13 评论 -
深入理解指针
一、什么是指针指针是一种数据类型,是无符号整数,不过这个整数有特殊意义,它代表着内存编号二、为什么要用指针1、函数之间需要共享变量,全局变量虽然也可以,但是不宜过多,可以把变量的地址编号传递给其它函数来达到共享变量的目的2、优化函数之间的传参效率,函数之间采用的是值传递传参,是内存的拷贝,当传的字节数很多时,效率会很低,但是如果只是传递变量的地址只需要传4字节(64位操作系统是8字节)3...原创 2019-10-06 15:49:44 · 600 阅读 · 0 评论 -
内存泄漏
一、什么是内存泄漏由于内存管理失败导致堆内存忘记释放或者无法释放,导致堆内存无法循环使用的情况叫做内存泄漏注意:当程序结束后所有的资源都会被系统回收,包括泄漏的内存二、内存泄漏的原因1、C语言中malloc/free函数不匹配(忘记写free或者没有执行到free),在C++中类的构造函数和析构函数中没有匹配的调用new和delete函数2、 在释放对象数组时在delete中没有使用方括...原创 2019-10-06 15:47:55 · 272 阅读 · 0 评论 -
strlen与sizeof的区别
1、strlen是函数,sizeof是运算符2、strlen只能计算字符串的长度,而且要想得到正确的长度,字符串后面必须包含’\0’,sizeof的参数可以是数组、指针、类型、对象、函数等3、在计算字符数组的时候strlen算的是实际有的字符数,而sizeof计算的是数组的大小举个例子:#include <stdio.h>#include <string.h>...原创 2019-10-06 15:11:00 · 316 阅读 · 0 评论 -
如何判断大小端
一、什么是大小端低位地址存储低位数据的是小端,低位地址存储高位数据的是大端举个例子:假设我定义int num = 0x01020304;,那么0x01是高位数据,0x04是低位数据,我们再假设这个数据存储在0xe1e2e3e4这个地址中那么如果数据是这么存的就是小端:0xe1e2e3e4(低位地址) = 0x040xe1e2e3e5 = 0x030xe1e2e3e6 = 0x02...原创 2019-10-05 17:15:21 · 1654 阅读 · 0 评论 -
如何写Makefile
一、什么是MakefileMakefile是一种编译脚本,里面记录的编译代码的命令的集合二、为什么要使用Makefile1、随着项目规模的不断增加,代码量越来越来多,为了更好的管理代码、协同工作,不得不把代码拆分、设计成多个文件2、由于源文件过多,编译时命令不易写,编译时间过长,而使用Makefile可以多目录编译,一次编写循环利用,有效节约编译时间3、Makefile中可以使用分支、循...原创 2019-10-05 16:41:26 · 267 阅读 · 0 评论 -
空指针与野指针
一、什么是空指针指针变量的值等于NULL(#define NULL ((void *)0))的指针叫做空指针注意:空指针不能解引用,因为此地址存储的是系统复位时要使用数据,不能访问,一旦解引用就会出现段错误二、如何避免使用空指针对来历不明的指针前要先判断是否是空指针,if(NULL == p)注意:NULL不一定是0,也有可能是1三、什么是野指针指向的内存不明确的指针叫野指针...原创 2019-10-05 11:02:32 · 424 阅读 · 0 评论 -
C/C++的区别
1、C语言是面向过程的语言,C++是面向对象的语言2、C语言用的是GCC编译器(现在也可以编译C++了),C++用的是G++编译器3、布尔类型是C++的关键字,但是不是C语言的关键字4、标准输入流输出流不同(C语言中是用scanf/printf实现的C++中是靠cin/cout(cout是 ostream 类型的对象,cin 是 istream 类型的对象)类实现的)5、在C++中可以函数...原创 2019-10-03 20:16:56 · 467 阅读 · 0 评论 -
static关键字的作用
一、static修饰局部变量1、不加static修饰,局部变量在函数或者代码块中执行完毕后就直接回收销毁了,每次执行都会重新分配内存。2、加了 static 修饰,局部变量在函数或者代码块中执行第一次初始化分配内存后,就算在函数或者代码块中执行完毕,该变量也不会被回收、销毁,一直会到程序结束 static 变量才会被回收。注意:加了static关键字后局部变量的位置会从栈空间转到全局数据区(...原创 2019-09-24 14:32:14 · 399 阅读 · 0 评论 -
volatile关键字
一、编译器的优化1、什么是编译器的优化?在本次线程内, 当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中;以后,再取变量值时,就直接从寄存器中取值;当变量值在本线程里改变时,会同时把变量的新值copy到该寄存器中,以便保持一致。2、编译器优化带来的问题当变量在因别的线程等而改变了值,该寄存器的值不会相应改变,从而造成应用程序读取的值和实际的变量值不一致。当该...原创 2019-09-23 20:59:50 · 206 阅读 · 0 评论 -
指针函数与函数指针的用法与区别
一、区别1、指针函数:指的就是返回值是指针的函数,本质就是个函数。2、函数指针:指的是指向函数的指针变量,本质就是个指针。二、用法1、指针函数:int* func(int a,int b);普通函数就是int func(int a,int b);,返回值是int,而指针函数就是返回值是指针的函数,即返回值是int*。2、函数指针:int (*func)(int x,int y);这里......原创 2019-09-16 20:16:58 · 15855 阅读 · 2 评论 -
C语言中的内存分配
1、代码段(text)里面存储的是可执行程序的二进制指令,为了防止被意外修改,代码段一般是只读的2、全局段(数据段data)存储被初始化过的全局变量、静态变量3、bss段(静态数据段)存储静态变量(被static修饰过的变量)和末初始化的全局变量,这段内存在程序运行前会被初始化为04、堆(heap)程序员手动管理,与指针配合使用,足够大,释放时间受控制,但不安全,容易产生内存碎片、内...原创 2019-10-06 20:40:12 · 330 阅读 · 0 评论