- 博客(12)
- 收藏
- 关注
原创 结构体的内存对齐
4.如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。不是所有的硬件平台都能访问任意地址上的任意数据的;Linux中没有默认对齐数, 对齐数就是成员自身的大小。3.结构体总大小为最大对齐数(每个成员变量都有一一个对齐数)的整数倍。2.其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。对齐数=编译器默认的一一个对齐数与该成员大小的较小值。结构体的内存对齐是拿空间来换取时间的做法。首先得掌握结构体的对齐规则:,
2024-04-21 15:58:53
287
1
原创 结构体的说明
对结构体类型的理解:结构体类型相当于内置类型(int,char,float等等),是变量属于什么类型的声明。就比如对于p1结构体变量的年龄初始化的时候并不是p1的真实年龄,这时我们要进行更改为其真正年龄16岁,这时我们就可以通过结构体访问进行更改:直接访问的方式更改:p1.age=16;对于结构体的初始化我们也可以通过直接访问的方式进行初始化,struct Stu p3={.name="李华",.age=14,.sex="man'',.id=''14555''};结构:一些值的集合,这些值称为成员变量。
2024-04-21 14:31:04
369
1
原创 整数和浮点数在内存中存储的差异
对于指数E的说明:E为无符号整型,在32位条件下E的范围为(0,255),在64位条件下E的范围为(0,2047)。虽然系统默认E为无符号整型,但E是指数肯定存在负数,所以我们规定存入内存E的真实值为E本身再加上中间值,在32位条件下中间数为127,在64位条件下中间数是1023。因为每次使用都是先使用低字节位再使用高字节位。对于64位的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位为有效数字M。对于32位的浮点数,最高的1位是符号位S,接着的8位是指数E,剩下的23位为有效数字M。
2024-04-10 22:42:58
797
1
原创 有限制库函数的模拟
有限制库函数可以控制字符串拷贝的字符(strncpy), 可以控制两字符串比较的长度(strncmp),也可以控制一个字符串连接到另一字符串的长度。函数声明:比较str1和str2前num个字符,如果相等则继续比较,最多可以比较num个字母,如果提前发现不一样就提前结束,如果str1>str2则返回大于零的数,如果str1<str2则返回一个小于零的数,str1=str2则返回零。2.如果源字符串的长度小于num,则拷贝完源字符串后,在目标的后面追加0,直到num个。模拟实现有限制库函数。
2024-04-04 22:37:23
395
1
原创 关于指针的梳理
7.p先与[3]结合表示是一个数组再与*结合表示数组里面有3个元素,每个元素是指针指针指向了一个int(char a,int b)的函数,函数有两个参数一个是char,另一个是int返回值是char类型,所以这是一个函数指针数组(主语是数组)。要了解指针首先要了解指针复杂的类型是如何理解的,按照我对指针的理解,复杂指针类型里会有许多运算符,其实指针和普通表达式一样有优先性和结合性,只要我们了解复杂指针的优先性和结合性是怎么一回事就可以轻轻松松理解指针运用指针。
2024-03-30 22:15:42
253
原创 实现字符串的左旋
小编想说刚拿到这个题目各位友友会觉得这个题目非常的简单,我们可能会利用循环思想先打印左旋k个字符之后的字符再打印左旋的k的字符。主体函数一样但以为要利用字符库函数进行拼接,所以要包含头文件#inlude<string.h>(友友们不要忘记了哦)函数主体小编未给,小编懒惰虫上头了,下线了,希望各位友友能有所收获!但小编想说这样子想是可以将题目写出来,但小编想为各位友友提供其他方法。实现一个函数,可以左旋字符串中的k个字符。1.设计循环是字符串左旋一次,执行k次。ABCD左旋一个字符得到BCDA。
2024-03-30 11:46:18
377
原创 模拟qsort库函数来实现通用冒泡排序
将const void*p强制类型转换为(char*)p,是因为我们写一个通用的冒泡排序函数所以数组每个元素的大小不一定是int或int的整数倍,所以我们强制类型转换为(char*),传地址给比较函数需要我们传两个相邻元素的地址(char*)p是该元素的首地址size是该元素的大小,通过(char*)p+j*size可以随着j的变化跳过相应j个元素,又因为比较函数将指针类型强制转换为了(int *)从而可以实现相邻元素两两比较的原理并且遍历整个数组。//这里的交换看似正确实则只交换了一个字节的内容。
2024-03-29 16:49:19
404
1
原创 qsort库函数实现原理
当sqort接收到了一个大于1的数会交换两个数的位置,所以当*(int*)p1大于*(int*)p2时交换p1与p2的位置就会变为升序排列。传参模板sqort(void*base,size_t num,size_t size,int(*compar)(const void*,const void*))【size_t是无符号整型】*(int*)p1小于*(int*)p2时会返回一个小于1的数。因为当*(int*)p1大于*(int*)p2时会返回一个大于1的数。2.是base指向的待排数组元素的个数。
2024-03-29 15:27:27
524
1
原创 C语言中的循环语句(while,do while ,for语句)
表达式2用于循环结束条件的判断;但这里我们只是知道for循环结构里三个表达式表达什么意思并不知道表达式它们之间是怎么使用的,其实它们之间使用关系是这样子的:首先执行表达式1初始化循环变量,接下来就是执行表达式2的判断部分,表达式2的结果如果==0,则循环结束;=0则执行循环语句,循环语句执行完后,再去执行表达式3,调增循环变量,然后再去表达式2的地方执行判断,表达式2的结果是否为0,决定循环是否继续。整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3再循环。
2023-12-03 09:29:28
212
2
原创 C语言中分支语句(if,switch)
这段代码打印的结果是:什么都没打印,在这段代码中,让第一个if和else语句对齐了,让我们误以为它们两个匹配,当if语句不成立的时候,自然想到的就是执行else子句,打印haha,但实际else适合第二个if进行匹配的,这样后面的if...else...嵌套在第一个if语句中的,如果第一个if语句就不成立,嵌套if和else就没机会执行了,最终什么都不打印。如果语句不止一条我们就不能省略{},如果省略了{}的话代码就不能准确表达我们的意思,即if结构中不会包括后面的语句。(0表示假,非0表示真。
2023-12-02 23:21:57
78
1
原创 打印由‘*’组成的线段及其出现问题和解决方法
然后我们再看题目,假如我们输入n要求我们输出n个‘*’,所以我们需要利用for循环来打印‘*’。首先依据输入的题意题目要求我们多组输入一个整数,所以要求我们掌握连续输入的方法。题目描述:输入:多组输入一个整数,表示线段的长度,即为“*”的个数;连续输入有三种方法:1.while(~scanf("%d",&n))输出:针对每行输入,输出占一行,用‘*’组成对应的线段。//换行错了地方,这样会使得每一个*都会换行导致一列*。//因为这里没有使用连续输入,导致只能输入一个数字;//控制打印‘*’的个数。
2023-11-28 17:26:18
89
原创 自己对编程的学习规划与学习目标
首先做一个简单的自我介绍吧,现在的我是一名大一新生对编程这一块不是非常了解只知道一些皮毛,还有许多值得我去学习的地方。现在的我在学校学习物联网工程这一个专业,需要掌握许多关于C语言方面的计算机语言,所以我想趁着现在刚刚入门学习编程语言的时候将知识学劳。其次我对编程的目标有点高,因为我认为上了大学并不意味着自己可以放任自己,而是我们应该充分利用大学的课余时间去丰富自己,提升自己。因此我想将C语言学透,并且学习C++语言。最后是自己对四年后的自己树立的一个目标,进入大厂,比如快手,抖音中工作。
2023-11-21 20:11:27
115
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人