
C
文章平均质量分 57
kai8wei
这个作者很懒,什么都没留下…
展开
-
gdb 调试系列
coolshell的 gdb系列100个gdb小技巧手把手教你玩转GDB(一)—牛刀小试:启动GDB开始调试手把手教你玩转GDB(二)——Breakpoint, Watchpoint和Catchpoints手把手教你玩转GDB(三)——常用命令 手把手教你玩转GDB(四)——–函数调用栈(call stack)探密原创 2017-09-14 15:12:49 · 228 阅读 · 0 评论 -
数据结构之—线性表之—浅谈单链表有头结点和无头节点
有头结点的链表统一了算法的实现,无头节点减少了节点个数,但是只有根据实际情况选用真正的有无头接链表待续://代码实现待续://代码实现待续://代码实现原创 2015-04-26 10:45:48 · 7102 阅读 · 0 评论 -
揭开链表逆转和排序的面纱
我们都知道,对于顺序表逆转和排序就如同数组一样,将数据改变位置就行,因为他们的数据是连续的空间存储的,但是对于链表如果你也这样只改变值进行排序,那你就太不懂链表的心了,链表的特点就是动态开辟游离的空间然后依据上一个节点所存的地址来寻找下一个节点,这样使得位置这个概念在链表里显得太不重要,所以对于链表我们如果想要逆转或者排序就是要改变每个节点里面存储的地址,通俗一点就是要改变指针的指向,于是我找到了原创 2015-05-05 16:19:31 · 979 阅读 · 0 评论 -
判断回文串
#includeusing namespace std;#includebool isPalindromeNumber(long num){ if(num<0) return false; long temp=num; long y=0; while(temp) { y=y*10+temp%10; temp/=10; } return num==y; re原创 2015-04-03 16:54:30 · 850 阅读 · 0 评论 -
画链表分析图引发的思考
一直觉得IT这个行业是聪明人干的,是经常进行思考的人干的,所以对于任何问题我都会思考。而且,我发现,画图是帮助思考的仙家之水,这不是神话,你一试就知道,如果你一直坚持下去,就会感觉如同吃了太上老君的仙丹一般,对于分析任何问题都会法力大增。 另外,我觉得计算机行业就是用一种方式在描述客观世界,所以不要包学习解决计算机中的问题是脱离实际,当想不通自己如何让计算机解决问题或者弄不懂计算机是如何解原创 2015-05-30 00:08:52 · 2243 阅读 · 3 评论 -
对于一个程序的思考1(const与 volatile)
#includeint main(){ const int i=0; int *j=(int *)&i; *j=1; printf("%d,%d\n",i,*j); return 0;}对于上边这个看似简单的程序却是深藏玄机windows平台1.在 .c 文件中输出是 1,1 ,深究原因是因为 const 在.c文件中定义的变量是只原创 2015-03-23 23:41:00 · 526 阅读 · 0 评论 -
数据结构之 --线性表之--串
简单的实现串的操作,其实这与那些字符串库函数所用的操作思想是相同的,但是这是一种数据的存储方式,与操作,重点强调了数据的存储.下面是串的非堆存储操作,说明白就是穿类似数组的存储,在分配内存时在栈中分配:/********************************************************************** * * Copyright原创 2015-05-30 00:38:46 · 1707 阅读 · 0 评论 -
浅谈内存对齐--linux和windows平台下内存分配的差异
一.内存对齐的初步讲解内存对齐可以用一句话来概括:“数据项只能存储在地址是数据项大小的整数倍的内存位置上”例如int类型占用4个字节,地址只能在0,4,8等位置上。例1:#include struct xx{ char b; int a; int c; char d;};转载 2015-03-15 13:49:37 · 1764 阅读 · 0 评论 -
简单模仿命令行bash功能
用LINUX有一段时间了,一致在bash底下输入命令但是从来都很疑惑这个bash是如何知道我要输入的什么命令,于是用自己所学知识暂时模仿一些bash功能,后续继续完善功能。 第一次的版本:/********************************************************************** * Copyright (c)2015,WK Stu原创 2015-04-29 00:12:56 · 1507 阅读 · 3 评论 -
数据结构之—线性表之—双向链表之—浅谈双循环链表
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。/********************************************************************** * Copyright (c)2015,原创 2015-04-27 16:49:55 · 839 阅读 · 0 评论 -
基本的排序算法之——选择排序法(对于固定的空间数组或者顺序表)
/********************************************************************** * Copyright (c)2015,WK Studios* Filename: * Compiler: GCC,VS,VC6.0 win32 * Author:WK * Time: 2015 4 20*************原创 2015-04-20 09:39:27 · 1282 阅读 · 0 评论 -
浅谈 my_strcmp() 函数
#include#include int my_strcmp(const char *p,const char *q) { assert(p!=NULL);//断言,括号内假就退出 assert(q!=NULL); int i = 0; for(;q[i]== p[i];i++) { if('\0'== q[i])//其实判断条件为'\0'==p[i原创 2015-01-11 23:58:12 · 1335 阅读 · 0 评论 -
浅谈find_char()函数 字符串中找单个字符和多个字符
#include#includevoid find_char(char *str, char value){ assert(str != NULL); while (*str!='\0') { if (value == *str) { printf("找到了"); break; } else { printf原创 2015-01-24 11:09:38 · 4347 阅读 · 0 评论 -
浅谈数组与指针
对于一维数组与指针:对于二维数组与指针:原创 2015-04-24 19:54:28 · 1034 阅读 · 1 评论 -
浅谈 str_reverse() 函数的实现
#include#includevoid my_str_reverse(char *str){ char* r; r=str; while(*str++) { NULL ; }str-=2;printf("String=");do { printf("%c",*str); }while(*str--!=*r);pr原创 2015-01-10 00:05:12 · 1261 阅读 · 0 评论 -
口袋中球的取出顺序问题,比赛名单问题
两个乒乓球队进行比赛,各队人。甲队为A,B,C 乙队为 X,Y,Z 抽签决定比赛名单。有人向队员打听比赛名单,A说他不和X比,C说他不和X,Z比,请编程序找出3组比赛名单 #includevoid Game_list(){ char i,j,k; /*i是a的对手;j是b的对手;k是c的对手*/ for (i='x';i<='z';i++) for (j原创 2015-04-16 22:11:41 · 789 阅读 · 0 评论 -
关于判断cpu大端存储还是小端存储的讨论与分析
小端存储和大端存储 小端存储(Little_endian):字数据的高字节存储在高地址中,而字数据的低字节存储在低地址中。 大端存储(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。如何判断cpu是大端存储还是小端存储呢?方法一.直接看内存进行判断方法二.编写一个程序进行判断 程序一如下:(指针判原创 2014-12-27 16:07:37 · 600 阅读 · 0 评论 -
浅谈 strlen() strcpy() strcat() 自己实现代码
#include#include#includeint my_strlen1(char *str)//求字符个数,有第三变量{ int count = 0; while(*str++) { count++; } return count;}int my_strlen2(char *str)//递归思想求字符个数{ if('\0'==*str) {原创 2015-01-09 00:10:18 · 651 阅读 · 0 评论 -
巧匠十进制转换成二进制,并输出二进制按位取反和逆序
#includeint main(){ int b[16]; int a[16]; int number=100;//数的范围0—2^16-1,这里以100为例 int i,j,k=0,n=0; do{ i=number%2; number=number/2; b[k++]=i; a[n++]=(i^1);}while(numb原创 2015-01-01 15:46:57 · 1372 阅读 · 0 评论 -
LINUX实现简单的进度条
方法:利用数组的循环输出,是这些图形化也可以在我们的黑框中实现了 哈哈/********************************************************************** * * Copyright (c)2015,WK Studios* * Filename: progress.c* * Compiler: GCC * *原创 2015-05-29 23:54:19 · 917 阅读 · 0 评论 -
对一个程序的思考4(结构体内存对齐)
#include#include#pragma pack(4)int main(){ unsigned char puc[4]; struct tagPIM { unsigned char ucPim1; unsigned char ucData0 : 1; unsigned char ucData1 : 2; unsigned char ucData2 : 3;原创 2015-03-29 14:59:42 · 732 阅读 · 0 评论 -
浅谈求最大公约数最小公倍数
#includeint cdiv1(int a, int b)//最大公约数函数1{ if(a==b) { return a; } else if(a<b) { return cdiv1(b-a,a); } else { return cdiv1(a-b,b); }}int cdiv2(int a,int b)//最大公约数2{原创 2015-01-25 16:38:07 · 612 阅读 · 0 评论 -
99乘法口诀妙用C语言输出
1.第一种形式输出 #includeint main(){ int i,j; for(i=1;i<=9;i++) { for(j=1;j<=i;j++) { if((i>=3&&i=3&&j<=4)) { if(i==4&&j==4) { printf(原创 2014-12-28 23:21:52 · 753 阅读 · 0 评论 -
求任意整数区间之间素数
//标记法解题(我称作触发器标记编程学习第一天)#include#define N 1 //此宏定义,1的值与下面的200都可以任意改为其他整数#define M 200int main() { bool p;int j,i; for(i=N;i<=M;i++) { p=true; for(j=1;j<=i;j++)原创 2014-12-28 17:42:03 · 757 阅读 · 0 评论 -
对一个程序的思考5(指针与所指数据类型的关系)
/********************************************************************** * * Copyright (c)2015,WK Studios * * Filename: A.h * * Compiler: GCC vc 6.0 * * Author:WK * * Time原创 2015-08-06 21:40:05 · 592 阅读 · 0 评论 -
如何让UDP变得靠谱一些(增加UDP的可靠性)
最经在写一个聊天系统,用到了UDP协议,但是要给UDP增加一些可靠性,终于在UNP这本书中找到了些许实现的思想,特来写写博客,与大伙交流一下思想,写的不够深入只是实现了书中所写,欢迎拍砖和留言交流!!!!!UNP书中采用的sigsetjmp 和siglongjmp来避免 由于竟态 导致的SIGALRM我采用的是pselect中注册了SIGALRM信号进行信号的避免同时还做到了原创 2016-03-22 16:05:05 · 5656 阅读 · 0 评论 -
浅谈 my_strstr()函数与my_strrstr()函数的实现
my_strstr()函数:在s1中查找整个s2第一次出现的起始位置,并返回一个指向该位置的指针,如果s2没有完整的出现在s1中,则返回NULL;my_strrstr()函数:在s1中查找整个s2最后一次出现的起始位置,并返回一个指向该位置的指针,如果s2没有完整的出现在s1中,则返回NULL。/***************************************原创 2015-03-22 11:16:18 · 1382 阅读 · 2 评论 -
宏定义中的# ## @# \
# (stringizing)字符串化操作符。其作用是:将宏定义中的传入参数名转换成用一对双引号括起来参数名字符串。其只能用于有传入参数的宏定义中,且必须置于宏定义体中的参数名前。如:[cpp] view plain copy #define example(instr) printf("the input string is:\t%s\n",#instr)转载 2016-06-11 11:09:39 · 1123 阅读 · 0 评论 -
如何保证申请内存的地址是4的倍数
前两天遇到了一个需求: 是每次申请一块内存空间 需要的首地址必须要是4的倍数 于是瞬间就想到了这不是就是在应用层重新封装一下malloc 和free 嘛,或者你自己实现一个应用层的内存池自己来管理内存空间的地址分配,等等 实现方法很多,使用者的需求就是只要我申请到的空间我可以使用并且给我返回的首地址必须是4的倍数,于是c语言的结构体内存对齐,以及malloc和free的实现...原创 2017-12-03 14:53:37 · 2120 阅读 · 0 评论 -
.写一个函数返回二进制参数值为1的个数
写一个函数返回二进制参数值为1的个数例如:15 0000 1111 返回4个1程序原型:int count one bits(unsigned int value){//返回1的位数}解答:#include int count_one_bits(unsigned int value) { int原创 2014-12-27 16:33:55 · 612 阅读 · 0 评论 -
浅谈输出实心菱形和空心菱形
/* * *** ***** ******* ***** *** *首先根据要输入的符号递增递减情况把图形分为上下两个三角形对于上述图形可以分为4行正三角形和3行倒三角,反之亦可可以发现每行都是先输出空格再输出*,可以循环进行细心可以发现对于空格来说由上到下依次减1,对于*是依次递增2倒三角反之,假设用 i 表示行数原创 2015-01-23 10:34:11 · 1892 阅读 · 0 评论 -
C语言中函数的思考(可以返回局部变量吗)
一般的来说,函数是可以返回局部变量的。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确的来说,函数不能通过返回指向栈内存的指针(注意原创 2015-03-28 10:57:08 · 6606 阅读 · 2 评论 -
C语言的内存区域(虚拟地址)探索
学习C语言对C语言的内存区域进行了探索首先我们知道:对于以下代码进行实验:/********************************************************************** * * Copyright (c)2015,WK Studios * * Filename: str.h * * Comp原创 2015-06-11 21:44:33 · 750 阅读 · 0 评论 -
C和C++动态内存的申请与释放思考(动态多维数组空间分配)
这里分配内存以数组为例,这样就建立了一种思维,肯定离不开数组与指针的关系,这两者的关系是一个永远的话题,具体的可以参见我的这篇文章,是关于数组与指针的下来我们开始动态内存分配方法之旅吧!C语言的:C++语言的:原创 2015-06-26 18:13:14 · 1288 阅读 · 0 评论 -
基本的排序算法之——插入排序法(稳定)(对于固定的空间数组或者顺序表)
/********************************************************************** * Copyright (c)2015,WK Studios* Filename: * Compiler: GCC,VS,VC6.0 win32 * Author:WK * Time: 2015 4 20*************原创 2015-04-21 19:28:50 · 833 阅读 · 0 评论 -
浅谈关于两个整数的交换函数的N种实现方式
1.用第三变量进行交换//宏交换#include//C语言头文件标准输出//#include using namespace std; //C++标准输出流头文件 #define swap_1(x,y,t) ((t)=(x),(x)=(y),(y)=(t))//此处为宏定义交换,无分号 void swap_2(int x,int y);//函数声明,注意分号 void原创 2014-12-28 23:59:52 · 663 阅读 · 0 评论 -
基本的排序算法之—— 冒泡排序(稳定)(对于固定的内存空间数组或顺序表,对于单链表也可以)
/********************************************************************** * Copyright (c)2015,WK Studios* Filename: * Compiler: GCC,VS,VC6.0 win32 * Author:WK * Time: 2015 4 18*************原创 2015-04-18 23:51:00 · 1046 阅读 · 0 评论 -
实现对一个数据(int)指定位置0或置1
/********************************************************************** * RightMove.cpp * Compiler: GCC,VS,VC6.0 win32 * Author:WK * Time: 2015 3 29 *************************************原创 2015-03-29 20:54:10 · 1992 阅读 · 0 评论 -
空闲时的思考1(二维数组存储字符串和指针)
其实每次看到关于字符串的操作我都十分的好奇,就想一探究竟,以下是自己闲来无事思考自己娱乐的一个程序/********************************************************************** * * Copyright (c)2015,WK Studios * * Filename: A.h * * Compil原创 2015-07-02 09:16:22 · 835 阅读 · 0 评论 -
用递归的思想写编写一个函数reverse_string(char * string)实现字符串反向输出和反向排列
#includevoid reverse_string(char *string){ if ('\0'!=*(++string)) reverse_string(string);//递归调用,每次调用都要输出 printf("%c",*(string-1));}int main(){ char *a = "abcde"; reverse_string(a);原创 2015-03-13 09:52:19 · 3678 阅读 · 0 评论