随笔分类 -  C

摘要:## 前言 ## 在计算机中数据存储和传输以位(bit)为单位,每8个位bit组成1个字节(Byte)。32位计算机的字长为32位,即4个字节;对应的,64位计算机的字长为64位,即8个字节。计算机系统对基本类型数据在内存中存放的位置有限制,要求这些数据的起始地址的值是某个数k的倍数,这就是所谓的内 阅读全文
posted @ 2019-11-07 11:05 小时候挺菜 阅读(1322) 评论(0) 推荐(0) 编辑
摘要:输出结果: 阅读全文
posted @ 2019-04-11 21:44 小时候挺菜 阅读(1014) 评论(0) 推荐(0) 编辑
摘要:函数调用可能引发的问题 1. 传入getMemory(char *p, int num)函数的形参为字符串指针,在函数内部修改形参并不能真正的改变传入形参的值,执行完 后的str仍然为NULL; 毛病出在函数GetMemory 中。 编译器总是要为函数的每个参数制作临时副本,指针参数p的副本是 _p 阅读全文
posted @ 2019-04-08 10:30 小时候挺菜 阅读(177) 评论(0) 推荐(0) 编辑
摘要:话不多说,上代码。 64位系统 #include <stdio.h> #include <stdlib.h> #include <string.h> struct A { short a; char b; char c; char d; }; struct B { char b; short a; 阅读全文
posted @ 2019-04-03 15:49 小时候挺菜 阅读(749) 评论(0) 推荐(0) 编辑
摘要:1、引言 面向对象编程(OOP)并不是一种特定的语言或者工具,它只是一种设计方法、设计思想。 它表现出来的三个最基本的特性就是封装、继承与多态。 很多面向对象的编程语言已经包含这三个特性了,例如 Smalltalk、C++、Java。 但是你也可以用几乎所有的编程语言来实现面向对象编程,例如 ANS 阅读全文
posted @ 2019-03-20 10:00 小时候挺菜 阅读(8280) 评论(0) 推荐(3) 编辑
摘要:snprintf(),函数原型为int snprintf(char *str, size_t size, const char *format, ...)。 将可变参数 “…” 按照format的格式格式化为字符串,然后再将其拷贝至str中。 #include <stdio.h> int main 阅读全文
posted @ 2019-03-05 14:20 小时候挺菜 阅读(478) 评论(0) 推荐(0) 编辑
摘要:这段代码其实考察的是变量作用域的知识,最终答案是4,20,仔细分析一下。 有两个知识点需要先说明下: 1.static成员存在作用域的问题,static成员并不是在函数内定义了在函数任何部位都可以访问,而是局限在大括号之间{ },也就是在这段大括号内static成员才有效,出了这个大括号就无法访问。 阅读全文
posted @ 2019-03-04 15:22 小时候挺菜 阅读(473) 评论(0) 推荐(0) 编辑
摘要:在小端模式下,输出为: 在大端模式下,输出为: 阅读全文
posted @ 2019-02-16 11:25 小时候挺菜 阅读(472) 评论(0) 推荐(0) 编辑
摘要:为了在程序运行过程中,将两个结构体数组合并成一个大的结构体,在节省空间的基础上,我使用一个大的结构体指针数组,来将其元素分别指向结构体数组中的结构体。 实现过程中,发现这个结构体指针数组的大小是不能确定的,所以使用变长数组来声明,由于gcc编译器未支持C99标准,所以编译无法通过。 进而,我使用ma 阅读全文
posted @ 2019-02-14 11:21 小时候挺菜 阅读(4249) 评论(0) 推荐(0) 编辑
摘要:今天使用strlen时 ,发现一个问题,demo代码如下: 运行后,发现结果,有点蹊跷,有时候是0,有时候是6。 strlen在计算数组长度的时候是遇到‘\0’时计算就停止。 如果不在字符数组后面加上‘\0’,那么strlen就会一直计算下去,直到遇到内存中的'\0',才停止计算。 可以看到在内存的 阅读全文
posted @ 2019-01-24 21:03 小时候挺菜 阅读(1372) 评论(0) 推荐(0) 编辑
摘要:#define setbit(x,y) x|=(1<<y) //将X的第Y位置1 #define clrbit(x,y) x&=~(1<<y) //将X的第Y位清0 阅读全文
posted @ 2019-01-05 15:15 小时候挺菜 阅读(1977) 评论(2) 推荐(0) 编辑
摘要:一、n-1发生了什么 ①、二进制数n,n-1后,如果最后一位是0,将向前一位借2,2-1=1。最后一位为1。如果前一位为0,将继续向前一位借2,加上本身少掉的1.则变为1。一直遇到1。减为0. 所以 二进制 xxxx10000-1 = xxxx01111 ②、n&n-1 按照上述 n=xxxx100 阅读全文
posted @ 2019-01-05 15:14 小时候挺菜 阅读(914) 评论(0) 推荐(0) 编辑
摘要:通常的交换两个变量a,b的过程为 需借助上面的第3个临时变量temp. 采用下面的方法,对于给定两个整数a,b,下面的异或运算可以实现a,b的交换,而无需借助第3个临时变量: 这个交换两个变量而无需借助第3个临时变量过程,其实现主要是基于异或运算的如下性质: 1.任意一个变量X与其自身进行异或运算, 阅读全文
posted @ 2019-01-05 15:06 小时候挺菜 阅读(630) 评论(0) 推荐(0) 编辑
摘要:一、宏定义,实现局部作用域 贴上一段代码: 显然,代码输出 因为define只有替换的作用,所以预处理后,代码实际是这样的: 在宏中加入do...while(0): 相当于: 二、替代goto goto可以解决多个if的时候,涉及到内存释放时忘记释放的问题,但是多个goto,会显得代码冗余,并且不符 阅读全文
posted @ 2018-12-27 15:30 小时候挺菜 阅读(207) 评论(0) 推荐(0) 编辑
摘要:一、什么是正则表达式? 有人说,正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规则去匹配符合规则的字符。 有人说,在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表 阅读全文
posted @ 2018-12-04 12:00 小时候挺菜 阅读(222) 评论(0) 推荐(0) 编辑
摘要:目标:读取一个bin文件,并且将bin文件中的数据,按字节对齐赋值给结构体,并且打印出结构体的内容 目前思路是简单的先将bin文件数据一次性读到一个数组中,再将数组强制转换为结构体 另外,在博客看到一个输出结构体的demo,贴在这里 只需要传入要打印结构体的结构体指针和结构体大小,就可以进行打印,且 阅读全文
posted @ 2018-12-03 16:50 小时候挺菜 阅读(861) 评论(0) 推荐(0) 编辑
摘要:输出最小宽度用十进制整数来表示输出的最少位数。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0(当最小宽度数值以0开头时)。 X 表示以十六进制形式输出02表示不足两位,前面补0输出;如果超过两位,则实际输出举例: 而如果直接写为 %2x,数据不足两位时,实际输出, 阅读全文
posted @ 2018-12-03 16:44 小时候挺菜 阅读(1763) 评论(0) 推荐(0) 编辑
摘要:两种方法1.全部读入内存 修改后重新存入文件2.边读边写到另一新建文件 要修改的部分修改后存入新建文件 其他部分原封不动写入写完删掉原先文件 将这个新的改为删掉那个的名字 方法一 读入内存修改 然后重新写入文件 方法二 逐行写入临时文件,遇到修改部分 修改后写入临时文件 完成后删除data.txt 阅读全文
posted @ 2018-11-22 21:20 小时候挺菜 阅读(4233) 评论(0) 推荐(0) 编辑
摘要:之前我们讲到了过程活动记录(AR),那么如何来操纵AR呢,一个可能的方法是,根据局部变量的地址进行推算,例如对于上面的a函数,执行a函数时的当前AR地址就是参数i的地址偏移8个字节,也就是 ((char*)&i) - 8。 然而,不同的C编译器,以及不同的硬件平台都会产生不同的AR结构布局,甚至在一 阅读全文
posted @ 2018-11-08 21:23 小时候挺菜 阅读(2684) 评论(0) 推荐(2) 编辑
摘要:C 语言自动提供的服务之一就是跟踪调用链——哪些函数调用了哪些函数,当下一个return语句执行后,控制将返回何处等。解决这个问题的经典机制是堆栈中的活动记录。 当每个函数被调用时,都会产生一个过程记录(或者类似的结构)。过程活动记录是一种数据结构,用于支持过程调用,并记录调用结束以后返回调用点所需 阅读全文
posted @ 2018-11-08 21:12 小时候挺菜 阅读(1240) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示