- 博客(11)
- 收藏
- 关注
原创 静态的通讯录
for(i=pos;④若pos为-1那就是没找到指定联系人,那么代表指定删除的人不存在,那么return返回,return相当于直接退出函数,返回到你调用函数的位置,其实和if else效果一样。Ⅲ.在Contact.c中实现查找指定联系人的函数(和删除函数的逻辑很像,无非就是把删除的那一步改成了打印指定联系人的信息)Ⅲ.在Contact.c中实现修改指定联系人的函数(和删除函数的逻辑很像,无非就是把删除的那一步改成了增加联系人的信息)Ⅰ.在主函数中将通讯录con的地址传参过去给删除指定联系人的函数。
2025-04-29 21:00:22
431
原创 自定义类型——联合体(共用体)
Un1中 char c有5个字节的大小,int i有4个字节的大小,联合体共用一块空间的话难道Un1的大小就是5吗,不是的,因为char的对齐数为1,int的对齐数为4,这个联合体的最大对齐数为4,联合体的大小要是最大对齐数的整数倍,所以是8,浪费了3个字节的空间。Un2中short c有14个字节的大小,int i有4个字节的大小,联合体的大小为最大对齐数4的整数倍,又得满足放下最大成员c的14个字节,所以联合体大小是16。当最⼤成员⼤⼩不是最⼤对⻬数的整数倍的时候,就要对⻬到最⼤对⻬数的整数倍。
2025-04-27 14:24:44
231
原创 结构体实现位段
虽然此时我们不知道_d的这30个bit位是不是有15个放在剩下的15个中再放新开辟的还是全部放新开辟的32个bit位中,但是我们明确知道开辟struct A用了2个字节。char先开辟1个字节,也就是8个bit位,先放a的3个bit位,剩下5个,够放b的4个bit位,还剩1个不够放c的5个bit位,所以要新开辟1个字节,也就是8个bit位,放了c的5个bit位,还剩3个bit位不够放d的4个bit位,再开辟1个字节也就是8个bit位,够放d的4个bit位,所以开辟S用了3个字节也就是24个bit位。
2025-04-26 19:16:12
309
原创 计算结构体大小
由基础4.(如果嵌套了结构体的情况,嵌套的结构体成员对⻬到⾃⼰的成员中最⼤对⻬数的整数倍处,结构体的整体⼤⼩就是所有最⼤对⻬数(含嵌套结构体中成员的对⻬数)的整数倍。3.最终占了0——8共9个字节,这是最终结构体的总大小吗,三个成员变量的最大对齐数=max{1,4,1}=4,而结构体大小是这个数的整数倍,所以是12。对⻬数 = 编译器默认的⼀个对⻬数与该成员变量⼤⼩的较⼩值=min{8,4}=4,所以i从偏移量4开始往后放4个字节,那么偏移量1——3就空出来了。⽽对⻬的内存访问仅需要⼀次访问。
2025-04-25 16:20:53
424
原创 指针深刻理解
得到c+1之后➖➖了,是内容c+1➖➖修改成了c,,也就是数组c中第一个元素的地址,再一次解引用找到数组c中第一个元素的内容,也就是E的地址,E的地址+3指向E,最后%s打印是ER。cpp【-1】【-1】+1:cpp【-1】【-1】🟰*(*(cpp-1)-1)上一次的cpp不改变,cpp-1指向数组cp中第2个元素的地址,第一次解引用得到内容c+2,-1得到c+1,即存放数组c中第2个元素的地址,再解引用得到N的地址,N的地址+1指向E,最后%s打印的是EW。
2025-04-24 22:43:01
223
原创 字符串函数之strcpy、strcat
2.功能:字符串追加,把 source 指向的源字符串中的所有字符都追加到 destination 指向的空间 中。3.参数: destination :指针,指向⽬的地空间 source :指针,指向源头数据。3.参数: destination :指针,指向⽬的地空间 source :指针,指向源头数据。2.功能:字符串拷⻉,拷⻉到源头字符串中的 \0 为⽌。⽬标空间必须有⾜够的⼤,能容纳下源字符串的内容。会将源字符串中的 '\0' 拷⻉到⽬标空间。⽬标空间必须⾜够⼤,以确保能存放源字符串。
2025-04-22 15:45:40
213
原创 指针深刻理解
x, ptr2:int类型的指针,解引用访问一个整型,从01后面的00向后访问4个字节的内容:00 00 00 02,因为小端存储,取出来是02 00 00 00,十六进制打印不会打印首位的0,即打印2000000。%p, p+0x1:p+十六进制的1,十进制的20转为十六进制是14,即0x100000+(0×1×sizeof(struct Test)=0x100000+14=0x100014。指针加减才要根据指针类型判断加几个字节。对于数组来说是不完全初始化,数组a={1,3,5,0,0,0}
2025-04-21 22:06:30
1471
1
原创 关机小游戏
if (strcmp(arr, "我是猪") == 0)//如果两个字符串相等,则system函数会返回0,0==0为真,执行if,关机被取消,跳出循环。printf("请输入:我是猪,否则你的电脑将会在60s后关机\n");printf("请输入:我是猪,否则你的电脑将会在60s后关机\n");②system:是用来执行命令的函数,需要包含头文件stdilb.h。if (strcmp(arr, "我是猪") == 0)printf("关机被取消\n");printf("关机被取消\n");
2025-04-19 22:57:41
221
原创 猜数字小游戏——理解rand、srand、time函数
②程序中在调⽤ rand 函数之前先调⽤ srand 函数,通过 srand 函数的参数seed来设置rand函数⽣成随机数的时候的种⼦,种子决定了随机数生成器的初始状态,因此相同的种子会产生相同的随机数序列。system("shutdown -s -t 60") 是一条在 Windows 系统中通过 C/C++ 的 ①system() 函数调用的命令,用于安排系统在 60 秒后关机。srand函数是不需要频繁调⽤的,⼀次运⾏的程序中调⽤⼀次就够了。printf("输错了,请重新输入数字\n");
2025-04-19 22:36:47
1359
原创 基于数组、指针的sizeof和strlen
p是个指针变量,是4个字节,取出p的地址再+1,表示p的地址的第4个字节后面的地址向后数到'\0'之间的字符个数,后面的'\0'在哪也不清楚,是随机值 ,而我们不知道这4个字节中有无'\0'所以不能判断这个随机值和上一个随机值的联系。跳过整个数组,指向'\0'后面的元素的地址,从这开始往后数字符个数直到'\0'结束,由基础知识——②,因为不知道后面的'\0'在哪里,所以'\0'之前出现的字符的个数是随机值。&p[0]是a的地址,+1是指向b的地址,所以是从b的地址向后数直到'\0'之间的字符个数,为5。
2025-04-16 19:30:22
1502
原创 找出100——200之间的素数,并打印到屏幕上
flag=1时假设i为素数,内部for循环判断不为素数则flag=0是非素数,跳出循环。当flag=1时为素数,打印这个数。Ⅱ.遍历完2——i-1的数,因为是素数所以不能被整除,而下一个j>i-1,所以跳出循环。一个数的两个因子其中一个大于等于这个数开平方的话,另一个数一定小于等于这个数开平方。这样会只判断能不能被2整除而没有遍历完2——i-1之间的所有数就打印数字。3.判断这区间内的所有数如果可以整除i则不是素数,否则是素数。Ⅰ.还没遍历完2——i-1的数,就跳出循环了,说明i不是素数。
2025-04-15 14:40:15
264
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人