
C语言
2号老码农了
这个作者很懒,什么都没留下…
展开
-
宏实现---交换一个数二进制的奇偶位
#include<stdio.h>#define SWAP(x) ( ( (x)& 0xaaaaaaaa ) >>1 | (((x)& 0x55555555) <<1) ) //(x)& 0xaaaaaaaa : 0xaaaaaaaa表示的二进制位为:101010.....101010(共三十二位) //其与x相&,奇数位的数不变,偶数位变为0, 右移以为奇数位的数变为偶数位//0x55555555: 二进制:0原创 2021-03-20 11:58:42 · 134 阅读 · 0 评论 -
C语言--宏实现offsetof函数
#define _CRT_SECURE_NO_WARNINGS//#define 实现函数offsetof//注:offsetof函数作用:计算结构体成员地址的偏移量(相对首元素地址)#include<stdio.h>#define OFFSETOF(StructType,Mem_name) ((int)&(((StructType*)0)->Mem_name))//1.先把0转换成结构体类型的指针,即用0来代表首元素的地址//2.用该指针访问结构体成员,成员的首原创 2021-03-20 11:22:07 · 220 阅读 · 1 评论 -
C语言--动态通讯录(可文件操作)
#include <stdio.h>#include<stdlib.h>#include<string.h>#include<errno.h>#define Max_name 10#define Max_sex 10#define Max_number 11#define Max_phoList 1000typedef struct PhoneList{ char name[Max_name]; char sex[Max_sex];原创 2021-03-19 23:42:21 · 742 阅读 · 0 评论 -
联合体
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>/* <<< 1 >>> 联合体 ---> 判断计算机的大小端存储模式 联合体大小计算 1.联合体大小至少是最大成员变量。 2.当最大成员大小不是最大对齐数的整数倍,就要对齐。*/int check_sys1(){ int a = 1 ; char* p = (char*)&a原创 2021-03-19 14:45:39 · 76 阅读 · 0 评论 -
结构体--位段
#define _CRT_SECURE_NO_WARNINGS/* <<<< 1 >>>> 位段1.位段成员可以是 int unsigned int signed int char 2.位段的空间按照 4字节(int) / 1字节 (char) 开辟3.位段涉及很多不确定因素,位段不跨平台。*///example 1#include <stdio.h>struct S{ char a原创 2021-03-18 23:49:25 · 111 阅读 · 0 评论 -
c语言实现qsort
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int cmp_by_int(void*start, void* end){ return *((int*)start) - *((int*)end) ;}void swap(char* e1, char* e2, int width)//对需要排序的部分一个字节一个字节进行交换{ char tmp; while (width--)//width代表一个需交换元素的字节大小,即需原创 2021-03-18 23:19:34 · 107 阅读 · 0 评论 -
动态内存管理---free.malloc.realloc
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h> //动态内存管理 -- malloc/free 函数int main(){ int* p = (int*)malloc(sizeof(int)* 10); //申请内存失败 if (p == NULL) { //打印错误信息 printf("%s\n",strerror(原创 2021-03-18 22:59:56 · 134 阅读 · 0 评论 -
c语言实现通讯录
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include<stdlib.h>#include<string.h>#define Max_name 10#define Max_sex 10#define Max_number 11#define Max_phoList 1000typedef struct PhoneList{ char name[Max_name]; char sex[Ma原创 2021-03-18 22:56:19 · 108 阅读 · 0 评论 -
动态内存管理---几道易出错的代码
#define _CRT_SECURE_NO_WARNINGS// 动态内存管理出现的几道 错误事例 <<1>>#include<stdio.h>#include<stdlib.h>#include<string.h>void* GetMemory(char** p){ *p = (char*)malloc(20);}int main(){ char* str = NULL; GetMemory(&s原创 2021-03-18 22:29:58 · 167 阅读 · 0 评论 -
利用联合体判断计算机的大小端
代码实现int check_sys(){ union { char c; int i ; }u; u.i = 1; return u.c ; // 小端返回 1 ,大端返回 0 ;int main(){ int ret1 = check_sys1(); int ret2 = check_sys2(); if (ret1 == 1) printf("sys1 :小端存储\n"); else printf("sys1 :大端存储\n") ; return 0;}原创 2021-03-08 19:09:20 · 480 阅读 · 0 评论 -
用一个程序弄清你的计算机是大端还是小端存储
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、什么是大端(小端)存储?二、具体实现方法一、什么是大端(小端)存储?(1)大端存储:数据的高字节放在内存的底地址处,低字节放在高地址处;(2)小端存储:数据的高字节放在内存的高地址处,低字节放在低地址处。二、具体实现方法#include <stdio.h>//封装check_sys函数判断计算机的大小端int check_sys1() //方法一{ int a = 1 ;// 1的二进制转化成原创 2021-02-03 16:25:57 · 555 阅读 · 1 评论 -
内存函数 -- memcpy 实现
memcpy函数的作用memmove:用于拷贝一块内存块中的内容,并将这些内容拷贝到另一内存块中。其特点是对任意字节进行逐字节拷贝。my_memcpy的实现:原创 2021-03-01 17:17:01 · 117 阅读 · 0 评论 -
柔性数组
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>/*柔性数组:(1)定义:在结构体中,若最后一个元素是不规定大小的数组(该结构体元素大于1),该数组长度是弹性可变的*///example ---柔性数组typedef struct S1{ int n; int arr[];}S1; // sizeof(S)所求的结构体大小未包含柔性数组的大小//example ---非原创 2021-03-18 22:22:30 · 71 阅读 · 0 评论 -
C语言文件操作--fputc.fpetc.fgets.fputs.fprintf.fscanf.sscanf.sprintf.fwrite.fread
#define _CRT_SECURE_NO_WARNINGS//文件操作// c语言默认的三个输出流 : stdin标准输入流(键盘) stdout标准输出流(屏幕)stderr标准错误流(屏幕) // 注: 1.以下pf 可换成任意输入输出流// 2.put函数---与文件操作 "w"模式匹配// get函数---与文件操作 "r"模式匹配#include<stdio.h>#include<stdlib.h>#include原创 2021-03-18 00:35:08 · 200 阅读 · 0 评论 -
C语言文件操作---fseek.ftell.fread.rewind
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<errno.h>#include<string.h>//文件操作// fread.fseek.ftell.rewindtypedef struct S{ char name[20]; int age ;}S;void text_fputs(FILE* pf){ char* str原创 2021-03-18 00:13:20 · 168 阅读 · 0 评论