C语言笔记
文章平均质量分 85
梳理总结C语言的重点、难点以及容易出错的知识点。
编程界的小学生、
这个作者很懒,什么都没留下…
展开
-
《C语言笔记:数组和指针并不相同》
在初学C编程的时,总是会听见说“数组和指针是相同的”,这是一种非常危险的说法。今天通过对《C专家编程》的学习,重新认识下指针和数组,分析下它们之间“并不相同”的原因。原创 2022-10-25 08:30:00 · 390 阅读 · 0 评论 -
《C语言笔记:offsetof宏和container_of宏》
一,offsetof宏 1,作用:计算结构体中某个元素与结构体首地址的偏移量。 2,原理:虚拟一个0地址处的结构体类型变量type,然后用type.member的方式来访问那个member元素,继而得到member相对于整个变量首地址的偏移量。 3,自己实现:offsetof(type,member) ( (unsigned long) &((type *)0...原创 2020-11-15 11:42:00 · 118 阅读 · 0 评论 -
《C语言笔记:字符串和字符数组》
一,C语言使用指针来管理字符串 1,C语言本身是没有String类型的,C语言中的字符串类型是通过字符指针来间接实现的。 2,定义字符串的方法:char *p = "hello world";此时的p就叫做字符串,但是实际上p只是一个字符指针(本质上是一个指针,只是p指向了一个字符串的起始地址)。 3,C语言种字符串的本质:指针指向头,固定尾部的地址相连的一段连续的内存(类似...原创 2020-11-15 10:57:00 · 147 阅读 · 0 评论 -
《C语言笔记:指针数组和数组指针》
一,从字面意思来理解指针数组和数组指针 1,指针数组:实质是一个数组,这个数组里存放的元素是指针。 2,数组指针:实质是一个指针,这个指针指向一个数组。二,分析指针数组和数组指针的表达式 int *p[5]; int (*p)[5];int *(p[5]) 1,先说说一般规律。 int *p;(p是一个指针),int p[5];p是一个数组。在定义一个符号的时候...原创 2020-11-08 09:46:00 · 72 阅读 · 0 评论 -
《C语言笔记:三种内存来源》
一,三种内存来源(程序可以操控的内存空间) 1,在一个C程序中,能够获取的内存就是三种情况:栈(stack)、堆(heap)、数据区(.data)。二,栈的详解 1,栈的内存空间,程序运行时自动分配&自动回收,栈是自动管理的,程序员不需要手工干预。 2,栈内存在程序中就是那一块大小有限的内存空间,程序反复使用这一块空间。不断的在这一块空间中自动分配&“自动回...原创 2020-11-15 17:28:00 · 212 阅读 · 0 评论 -
《C语言笔记:typedef关键字的用法》
一,typedef关键字 1,C语言中的类型一共有两种:一种是编译器定义的原生类型(基础数据类型,比如int char float double);第二种是用户自定义的类型,不是语言自带的而是程序员自己定义的(比如数组指针、指针数组、函数指针、结构体类型、函数类型等)。 2,有时候自定义类型太长了,用起来不方便,所有用typedef给它重命名一个短点的名字。 3,需要注意的是...原创 2020-11-08 15:05:00 · 188 阅读 · 0 评论 -
《C语言笔记:函数指针》
一,函数指针的实质 1,函数指针的实质还是指针,还是指针变量。本身占四个字节(32位系统)。 2,函数指针、数组指针、普通指针之间本身没有区别,区别在于指针指向的东西是个什么玩意。函数指针指向一个函数,数组指针指向一个数组。 3,函数的实质是一段代码,这一段代码在内存中是连续分布的(一个函数的大括号括起来的所有语句将来编译生成的可执行程序是连续的),所以对于函数来说很关键的是...原创 2020-11-08 14:22:00 · 113 阅读 · 0 评论 -
《C语言笔记:指针和强制类型转换》
一,变量的数据类型的含义 1,所有类型的数据都是以二进制的形式存储在内存中的。内存中只知道有0和1,不知道是int的还是float还是其他类型。 2,int、char、short等属于整型,它们的存储方式(数据转换成二进制数在内存中的存放方式)是相同的,只是内存格子的长度不同(所以这几种整型就彼此叫二进制兼容格式);而float和double的存储方式彼此不同,和整型就更不相同了...原创 2020-11-06 08:12:00 · 363 阅读 · 0 评论 -
《C语言笔记:指针相关(二)》
指针类型决定了指针如何参与运算 1,指针参与运算时,因为指针变量本身存储的数值是表示地址的,所以运算也就是地址的运算。 2,指针参与运算的特点是,指针变量加1并不是真的加1,而是加1*sizeof(指针类型);如果是int *指针,则加1实际上就是表示地址+4(地址+sizeof(int)),如果是char *指针,则+1表示地址+1(地址+sizeof(char)); 3,...原创 2020-11-05 22:54:00 · 54 阅读 · 0 评论 -
《C语言笔记:指针相关(一)》
一,野指针问题 1,什么是野指针? 野指针就是指针指向了一个不可知的位置(随机的、不正确的、限制访问的)。 2,会造成什么危害? 第一种情况,指向一个不可访问的地址(比如内核空间),会触发段错误,这种算是最好的情况。 第二种情况,指向一个可用的但是没有什么特别意义的空间(比如说曾经使用过但已经不用了的栈空间或堆空间),这个时候程序运行不会出错,也不会对当前...原创 2020-11-03 08:31:00 · 66 阅读 · 0 评论 -
《C语言笔记:位操作相关》
一,位操作一般用法 1,特定位清零用“&”。 要想把一个数的特定位清零,就需要构造另一个数,这个数的对应特定位为0,其他位为1。2 2,特定位置1用“|”。 要想把一个数的特定位置1(设置特定位),就需要构造另一个数,这个数的对应特定位为1,其他位为0。 3,特定位取反用“^”。 要想把一个数的特定位取反,就需要构造另一个数,这个数的对应特定位...原创 2020-11-02 08:32:00 · 131 阅读 · 0 评论 -
《C语言笔记:内存相关》
一,内存编址方式 1,内存在逻辑上就是一个一个的格子,这些格子可以用来装东西(里面装的内容就是内存中存储的数),每个格子都有一个编号,这个编号就是内存地址,这个内存地址(就是一个数字)和这个格子的空间(实质是一个空间)是一 一对应且永久绑定的。 2,程序运行时,CPU只认识内存地址,至于这个地址所代表的空间在哪里,怎么分布并不关心。因为硬件设计保证了按照这个地址就一定能找到这个格...原创 2020-10-31 08:35:00 · 150 阅读 · 0 评论 -
《C语言笔记:左值和右值》
一,什么是左值什么是右值? 位于“=”符号左边的是左值,右边的是右值。二,左值和右值的含义。 当一个变量做左值时,编译器就认为这个变量符号所代表的含义是这个变量所对应的内存空间。 当一个变量做右值时,编译器认为这个变量符号所代表的含义是这个变量的值,也就是这个变量所对应内存空间中存的那个数值。三,左值和右值的区别。 用一个现实中的例子类比就像是“家”这个字的含义,比如...原创 2020-11-05 08:26:00 · 322 阅读 · 0 评论