![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
无
昨天;明天。今天。
这个作者很懒,什么都没留下…
展开
-
位段
1. 位段的成员可以是 int unsigned int signed int 或者是 char (属于整形家族)类型2. 位段的空间上是按照需要以4个字节( int )或者1个字节( char )的方式来开辟的。3. 位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使用位段//一个例子struct S{char a:3;char b:4;char c:5;char d:4;};struct S s = {0};s.a = 10;s.b = 12;s..原创 2022-03-25 13:57:12 · 100 阅读 · 0 评论 -
计算结构体的大小。
首先得掌握结构体的对齐规则:1. 第一个成员在与结构体变量偏移量为0的地址处。2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。VS中默认的值为83. 结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍可见成员顺序不同,会影响结构体的大小。...原创 2022-03-25 12:51:54 · 472 阅读 · 0 评论 -
关于union的题
#include <stdio.h>union Un{ short s[7]; int n;};int main(){printf("%d\n", sizeof(union Un));return 0;}答案解析结构体向int对齐,7个short一共是14字节,对齐后是16字节。n是单独的4字节,由于是union,所以n与s共用空间,只取最长的元素,故占用16字节。在X86下,有下列程序#include<stdio.h>...原创 2022-03-25 12:22:08 · 826 阅读 · 0 评论 -
结构体大小计算
#define MAX_SIZEA+Bstruct _Record_Struct{unsigned char Env_Alarm_ID : 4;unsigned char Para1 : 2;unsigned char state;unsigned char avail : 1;}*Env_Alarm_Record;struct _Record_Struct *pointer = (struct _Record_Struct*)malloc(sizeof(struct...原创 2022-03-25 11:04:17 · 406 阅读 · 0 评论 -
模拟实现memmove
void *memmove( void *dest, const void *src, size_t count );红色方框(src)是源代码,蓝色方框(dest)是要拷贝的目的地。如果dest地址小于src就是有部分在3前面例如:dest(12345),src(34567)采用从前拷贝就是(3拷贝到1位置依次进行)拷贝后为34567678910如果从后往后的话(7拷贝到5而五还没拷贝这样会出错)导致结果是76767678910而出错。下面memmove模拟...原创 2022-03-23 15:35:12 · 83 阅读 · 0 评论 -
模拟实现memcpy
void *memcpy( void *dest, const void *src, size_t count );把src中的内容拷贝到dest拷贝count个字节可以一个一个字节从前往后拷贝。下面模拟实现memcpy。//模拟实现memcpy#include<stdio.h>void* my_memmove(void* dst, const void* sor, int count){ void* ret = dst; whi...原创 2022-03-23 15:17:43 · 108 阅读 · 0 评论 -
strstr模拟实现
strstr是查找一个字符串是否在另外一个字符串;如果没有返回NULL如果有下面一个例子:实现思路:先声明三个变量s1 s2 cur ;s1与s2每个字符串比较,而cur记住是s1开始比较的位置例子:char arr1[] = "aaabcef";开始查找 当s1指向第三个时发现并没找到,那么下次查找 char arr2[] = "aabc"; s1会从第二个a开始查找;那么cur++后就是s1第二次查找开 ...原创 2022-03-21 12:00:00 · 138 阅读 · 0 评论 -
模拟实现strcmp
首先strcmp中字符串不是比较字符串长度,而是比较单个字符。例如:char arr1[] = "op";char arr2[] = "abcdef";char arr3[] = "abc";上面每个字符隐藏义工'\0';arr1第一字符o与arr2第一字符a比较显然o的ascll值更大,往后就不比较了,所以就是arr1大。同理:arr2第一字符a与arr3第一字符a,相等继续往下比较 最后d比'\0'的ascll值更大,往后就不比较了,所以就是arr2大。strc...原创 2022-03-20 15:16:27 · 141 阅读 · 0 评论 -
strlen 的三种模拟实现
1.#include<stdio.h>#include<string.h>#include<assert.h>int my_strlen(const char* arr){ char* start = arr; char* end = arr; assert(start && end); while (*end != 0) { end++; } return end -.原创 2022-03-20 10:16:47 · 221 阅读 · 0 评论 -
题:生活费用
/*编程记录有一年的生活费用,统计一年总费用是多少?找出最多费用的月份和费用数目,最少费用的月份和费用数目,每个月的费用从键盘输入*/#include<stdio.h>int main(){ int i = 0; int arr[13] = { 0 }; int count = 0;//计算总额 int min = 0; int max = 0; for (i = 1; i <= 12; i++)//i表示一年的月份。 .原创 2022-03-19 14:26:29 · 1008 阅读 · 0 评论 -
素数回文
xiaoou33对既是素数又是回文的数特别感兴趣。比如说151既是素数又是个回文。现在xiaoou333想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a 跟b 之间满足条件的数。(5 <= a < b <= 100,000,000);输入 这里有许多组数据,每组包括两组数据a跟b。 输出 对每一组数据,按从小到大输出a,b之间所有满足条件的素数回文数(包括a跟b)每组数据之后空一行。#include<stdio.h>int pnumber(.原创 2022-03-19 12:00:00 · 157 阅读 · 0 评论 -
KiKi去重整数并排序
描述给定一个整数序列,KiKi想把其中的重复的整数去掉,并将去重后的序列从小到大排序输出。输入描述:第一行,输入一个整数n,表示序列有n个整数。第二行输入n个整数(每个整数大于等于1,小于等于1000),整数之间用空格分隔。输出描述:去重并且从小到大排列的整数序列,整数之间用空格分隔。暴力求解法 :先排序后再去重。 去重用另外一个数组接受。#include<stdio.h>#include<stdlib.h>int cmp_t(int*..原创 2022-03-18 12:00:00 · 402 阅读 · 0 评论 -
给你n个整数,请按从大到小的顺序输出其中前m大的数
泡沫排序可以,此次用快速排序法来做题。题目://给你n个整数,请按从大到小的顺序输出其中前m大的数。输入:多组测试,第一行输入两个整数n m。 第二行输入n个数。输出:第三行输出前m大的数。n>1 || n<1000000。最终呈现如下:红方块:n红⚪是m蓝方块是最终输出。//给你n个整数,请按从大到小的顺序输出其中前m大的数。#include<stdio.h>//从大到小。void qicksort(int arr...原创 2022-03-17 12:00:00 · 1821 阅读 · 5 评论 -
sizeof
sizeof是一个操作符。intmain(){inta[]={1,2,3,4};//0123int(*p)[4]=&a;printf("%d\n",sizeof(a));//4*4=16printf("%d\n",sizeof(a+0));//4/8a+0是数组第一个元素的地址,是地址,大小就是4/8个字节printf("%d\n",sizeof(*a));//4a表示数组首元素的地址,*a表示数组的第一个元...原创 2022-03-16 07:57:06 · 471 阅读 · 0 评论 -
函数指针数组
上篇实现一个简易计算器,用函数指针代码还很长。利于函数指针数组可以更好实现这个功能。那么什么是函数指针数组看下面:void test(const char* str){ printf("%s\n", str);}int main(){ //函数指针pfun void (*pfun)(const char*) = test; //函数指针的数组pfunArr void (*pfunArr[5])(const char* str); pfunAr...原创 2022-03-15 12:30:00 · 96 阅读 · 0 评论 -
函数指针
void test(){printf("hehe\n");}//下面pfun1和pfun2哪个有能力存放test函数的地址?void (*pfun1)();void *pfun2();首先,能给存储地址,就要求pfun1或者pfun2是指针,那哪个是指针?答案是:pfun1可以存放。pfun1先和*结合,说明pfun1是指针,指针指向的是一个函数,指向的函数无参数,返回值类型为void。#define _CRT_SECURE_NO_WARNINGS#includ...原创 2022-03-14 16:53:18 · 91 阅读 · 0 评论 -
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
输入用例长度不超过100。例如:I like beijing.可看成三小段字符串(按空格分开)结果输出:beijing. like I//思路:先整体倒过来,然后再每个再倒过来,最后输出字符串。#include<stdio.h>#include<string.h>#include<assert.h>void reverse(char* l, char* r)//颠倒字符串。{ assert(l &&..原创 2022-02-27 15:50:18 · 1203 阅读 · 0 评论 -
求最小公倍数
正整数A和正整数B的最小公倍数是指能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。#include<stdio.h>//思路两个数相乘再除以它们最大公约数就求出最小公倍数。int main(){ int a=0; int b=0; while(scanf("%d %d", &a, &b)!=EOF) { int c=a*b;//两数乘积先存起来。 //让两数最大值在a中为...原创 2022-02-27 12:28:03 · 186 阅读 · 0 评论 -
整形提升(源码 反码 补码)
32平台机器 2进制-128 原码:1000 0000 0000 0000 0000 0000 1000 0000 反码:1111 1111 1111 11111111 1111 0111 1111 补码:11111111 111111111111 11111000 0000char(类型) 存 1000 0000%u 时 先整形提升11111111 1111...原创 2022-02-25 19:58:56 · 374 阅读 · 0 评论 -
大端 小端
//请简述大端字节序和小端字节序的概念,设计一个小程序来判断当前机器的字节序/*大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。*/#include<stdio.h>int main(){ int a = 1; //0x00 00 00 01 小端存储:01 00 00 00 大端存储:00 00 00 01 ...原创 2022-02-25 18:54:41 · 426 阅读 · 0 评论 -
细节的重要
首先今天学习代码的过程中类型要一致,能一个数据存到另一个 例如:double float其次敲代码的过程中题目要读清 例如:.输入五行;每一行5个数据。1.题目要求先全部输完后再输出并且每行后面要输出这一行数据的和。例如:1 2 3.2 4 5这一行输出为1 2 3.2 4 5 15.21 2 3.2 4 5 1 2 3.2 4 5 15.22.输入一行再输出一行加总会这与上面的不一样....原创 2022-01-13 22:00:00 · 70 阅读 · 0 评论