c语言
文章平均质量分 60
半岛铁盒.
如果遇到10年前的自己,你最想对他说什么
展开
-
uint 正数 与 int 负数 相加,会变成很大的正数
从结果来看,uint + int 负数,变成了一个很大的数:4294967274, 如果项目程序中有这种代码,无疑是埋下巨坑,比如一个小白,他肯定会觉得0 + -22 = -22 < 0, 然后高兴的以为,这肯定会运行到小于0 的代码逻辑中,导致最后程序运行的结果事与愿违。uint 取值范围:0 ~ 2^32 - 1, uint之所以是32次方,是因为无符号,相对int省去一个正负符号的占位。int 取值范围: -2^31 ~ 2^31-1。原创 2022-11-10 11:54:56 · 857 阅读 · 0 评论 -
git 常用操作
【代码】git 常用操作。原创 2022-10-11 16:07:18 · 90 阅读 · 0 评论 -
c语言实现跨平台dns域名解析
C语言写的域名解析函数api,跨平台支持windows/linux/Mac OS/Android/iOS:转载 2022-06-20 20:32:17 · 804 阅读 · 0 评论 -
日常开发笔记
1.字体获取地址字体量贩 - 字体下载网站,中文字体下载,英文字体下载,字体网站,字体库下载原创 2021-12-22 16:07:00 · 59 阅读 · 0 评论 -
一级指针和二级指针的区别与应用
一级指针和二级指针的区别与应用原创 2021-06-04 14:13:15 · 3630 阅读 · 0 评论 -
strcpy的字符串溢出真的很可怕
如图:按代码逻辑,程序员的想法是校验传入的str字符串密码,是不是"123",如果是的话就打印“Checkpasswordsucceed!”,反之则打印“Checkpasswordfailed!”。所以当一个人不知道字符串密码的时候,它任意传入一串字符串,就如图中的,好家伙,一眼看过去,按代码逻辑来,你是不是觉得校验失败了,然后打印“Checkpasswordfailed!”?然而,最终的结果却是:校验成功了“Checkpasswordsucceed!”等你再回头...原创 2021-04-20 14:35:03 · 1888 阅读 · 1 评论 -
static与const的作用
static:(1)设置变量的存储域,函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;(2)限制变量的作用域,在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;(3)限制函数的作用域,在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模...原创 2020-03-13 16:02:29 · 729 阅读 · 0 评论 -
else if与if使用需谨慎,可能不是你想的那样
#include<stdio.h>int a = 1;int main(void){ if(a == 1) { printf("a == 1\n"); } else if(a != 0) { printf("a != 0\n"); } return 0;}这段代码运行的...原创 2020-02-27 15:51:38 · 1149 阅读 · 0 评论 -
彻底理解结构体struct和枚举union的内存对齐和大小计算
#include <iostream>using namespace std;typedef union{ long i; //32位机占4个字节 int k[5]; //5个int占20个字节,一个int是4个字节 char c; //c实际只占一个字节,但由于内存对齐会给它分配4个字节的空间}DATE;DATE D;struct d......原创 2018-08-11 11:21:57 · 375 阅读 · 1 评论 -
为什么链表的插入删除要用二级指针?
#include <iostream>using namespace std;typedef struct listnode{ int date; struct listnode *next;}listnode;void Init(listnode **head) //链表初始化{ listnode *p=new listnode; ...原创 2018-07-27 21:33:11 · 2180 阅读 · 3 评论 -
exit函数和return函数的主要区别
1、exit函数和return函数的主要区别是: 1)exit用于在程序运行的过程中随时结束程序,exit的参数是返回给OS的。main函数结束时也会隐式地调用exit函数。exit函数运行时首先会执行由atexit()函数登记的函数,然后会做一些自身的清理工作,同时刷新所有输出流、关闭所有打开的流并且关闭通过标准I/O函数tmpfile()创建的临时文件。exit是结束一个进程,...转载 2018-07-22 19:59:14 · 1045 阅读 · 0 评论 -
常用排序总结(转,自家用):冒泡,选择,插入,归并,堆,快速排序
我们通常所说的排序算法往往指的是内部排序算法,即数据记录在内存中进行排序。 排序算法大体可分为两种: 一种是比较排序,时间复杂度O(nlogn) ~ O(n^2),主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。 另一种是非比较排序,时间复杂度可以达到O(n),主要有:计数排序,基数排序,桶排序等。 这里我们来探讨一下常用的比较排序算法,非比...转载 2018-07-19 09:03:07 · 193 阅读 · 0 评论 -
fread,fwrite函数详解
fread,fwrite函数详解函数原型:size_t fwrite ( const void * buffer, size_t size, size_t count, FILE * stream ); (1)写操作fwrite()后必须关闭流fclose() (2)不关闭流的情况下,每次读或写数据后,文件指针都会指向下一个待写或者读数据位置的指针size_t ...转载 2018-07-17 09:39:14 · 976 阅读 · 0 评论 -
快速排序
#define MAXSIZE 100#include <stdio.h>void print(const int *p,int len){ int i = 0; for (; i < len; i++) { printf("%d ",p[i] ); } printf("\n");}void swap(int *...原创 2018-07-17 09:14:31 · 128 阅读 · 0 评论 -
多线程实现服务器与多个客户端通信,客户端之间相互不干扰
1,服务端创建ServerSocket绑定端口号,循环调用accept()方法2,客户端创建一个socket并请求和服务器端连接3,服务器端接受客户端请求,创建socket与该客户建立连接4,两个socket在一个单独的线程上通话5,服务器端继续等待新的连接也就是说当有一个新的客户端与服务端连接,就创建一个新的socket并在这个线程里面通信。 客户端主要代码:ch...原创 2018-07-17 09:06:56 · 4007 阅读 · 1 评论 -
文件操作:r r+ w w+ a a+
r 打开只读文件,该文件必须存在。r+ 打开可读写的文件,该文件必须存在。w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。a+ 以附加...原创 2018-04-02 20:16:25 · 2350 阅读 · 0 评论 -
树:前序建树,前序遍历,中序遍历,后序遍历,层序遍历
#include #include #define MAXSIZE 30typedef char ElemType;typedef struct BiTreeNode{ElemType data;struct BiTreeNode *Lcld,*Rcld; //定义了左孩子,右孩子指针指向这个结构体指针}Node;typedef Node* BiTree;原创 2017-12-12 20:24:30 · 250 阅读 · 0 评论 -
链式队列的入队出队操作
#include #include #define OK 1#define ERROR 0typedef int Status;typedef int ElemType;typedef struct QueueNode{ElemType data;struct QueueNode *next;}Node; //定义结点type原创 2017-12-12 20:19:17 · 5853 阅读 · 0 评论 -
链栈的进栈出栈操作
#include #include #define OK 1#define ERROR 0typedef int ElemType;typedef int Status;typedef struct StackNode{ElemType data;struct StackNode *next;}Node;typedef struct LinkSt原创 2017-12-12 20:15:33 · 6115 阅读 · 0 评论 -
单链表的定义,插入,删除,读取(二级指针,一级指针的应用)
#include #include #define Ok 1#define ERROR 0typedef int Status;typedef int ElemType;typedef struct Node{ElemType data;struct Node *next;}Node;typedef Node* Linklist;void I原创 2017-12-11 22:54:51 · 262 阅读 · 0 评论 -
指针分析:数组指针,指针数组,指针的指针,野指针深度解析
#include int main(){ char *a[3]={"C","C++","Java"}; char *p,**pp; puts(a[1]);/*输出C++,puts函数输出整个字符串包括'\0'*/ /*C++*/ printf("%c\n",*(a[2]+2));/*输出v,a[2]为字符串java,a[2]+2表示首字符向原创 2017-11-27 23:34:34 · 287 阅读 · 0 评论 -
常见C语言题目:选择排序,冒泡排序,函数调用,递归等重要题列
/*鞍点*//*#include int main(){ int a[3][4],i,j,k; for(i=0;i for(j=0;j scanf("%d",&a[i][j]); for(i=0;i { j=0; for(k=1;k if(a[原创 2017-11-27 22:21:19 · 1310 阅读 · 0 评论 -
队列的入队出队操作
#include #define MAXSIZE 30#define OK 1#define ERROR 0typedef int Status;typedef int ElemType;typedef struct SqQueue{ElemType data[MAXSIZE];int front ,rear;}Queue; //把SqQueue原创 2017-12-12 20:17:52 · 7043 阅读 · 0 评论 -
顺序栈的入栈出栈操作
#include #define MAXSIZE 30#define OK 1#define ERROR 0typedef int ElemType;typedef int Status;typedef struct SqStack{ElemType data[MAXSIZE];int top;}Stack;void IintStack(Stac原创 2017-12-12 20:13:51 · 2408 阅读 · 0 评论 -
插入排序
#define MAXSIZE 100#include <stdio.h>void print(const int *p,int len){int i = 0;for (; i < len; i++){printf("%d ",p[i] );}printf("\n");}void insert(int *a,int len){int i,j,temp;...原创 2017-12-24 15:26:08 · 111 阅读 · 0 评论 -
堆排序
#define MAXSIZE 100#include void print(const int *p,int len){int i = 0;for (; i {printf("%d ",p[i] );}printf("\n");}void swap(int *a,int i,int j){int temp;{temp = a[i原创 2017-12-24 15:29:12 · 101 阅读 · 0 评论 -
c语言版通讯录 实现联系人信息的添加,删除,修改,排序,保存,查询
#include #include #include #define OK 1#define ERROR 0#define MAX 20typedef int Status;typedef struct Node{ char name[MAX]; char number[MAX]; char email[MAX]; struc原创 2018-01-24 21:33:31 · 6102 阅读 · 1 评论 -
双向链表的插入,删除,遍历打印
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Node pNode; struct Node { int data; pNode *prev, *next; }; /* 初始化链表,尾插法 */ pNode *InitList(pNode *...原创 2018-03-26 17:33:47 · 1140 阅读 · 0 评论 -
函数调用选择排序
#define MAXSIZE 100#include void print(const int *p,int len){int i = 0;for (; i {printf("%d ",p[i] );}printf("\n");}void swap(int *a,int i,int j){int temp;{temp = a[i原创 2017-12-17 16:22:46 · 1085 阅读 · 0 评论