- 博客(27)
- 收藏
- 关注
原创 makfile一些常用方法
Makefile有三个非常有用的变量。分别是$@,$^,$<代表的意义分别是:$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件。如果我们使用上面三个变量,那么我们可以简化我们的Makefile文件为:# 这是简化后的Makefilemain:main.o mytool1.o mytool2.ogcc -o $@ $^main.o:main.c ...
2019-06-12 15:05:24
248
原创 单链表反转之非递归
整体思路是这样的,在一个完整的链表之外附加三个节点,代码如下:#include<stdio.h>#include<stdlib.h>typedef struct node{ int data; node* next;}* pnode;void CreateList(struct node* &head, int i) /...
2019-03-27 23:15:23
248
原创 linux上的socket编程,server和client小栗子
话不多说,上代码。client端代码:#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <arpa/inet.h>#include <sys/socket.h>#define BUFSIZ...
2019-03-24 18:24:58
1249
转载 通过 GDB 调试理解 GOT/PLT
关于 Linux 中 ELF 文件格式可参考详细文档《ELF_Format》,本文仅记录笔者理解GOT/PLT的过程。GOT(Global Offset Table):全局偏移表用于记录在 ELF 文件中所用到的共享库中符号的绝对地址。在程序刚开始运行时,GOT 表项是空的,当符号第一次被调用时会动态解析符号的绝对地址然后转去执行,并将被解析符号的绝对地址记录在 GOT 中,第二次调用同一符号...
2019-03-01 16:40:48
3611
1
转载 mov eax,dword ptr fs:[0] 指令
FS寄存器指向当前活动线程的TEB结构(线程结构) 偏移 说明000 指向SEH链指针004 线程堆栈顶部008 线程堆栈底部00C SubSystemTib010 FiberData014 ArbitraryUserPointer018 FS段寄存器在内存中的镜像地址020 进程PID024 线程ID02C 指向线程局部存储指针030 PEB结构地址(进程结构)0...
2018-12-14 15:44:50
3176
原创 ubuntu16.04 安装gcc 7.3.0
我尝试过用编译的方法,比较麻烦,所以我找到下面的方法,直接从工具链源里安装:sudo add-apt-repository ppa:ubuntu-toolchain-r/testsudo apt-get update sudo apt-get install gcc-7然后是配置指令,优先级可以自己定:sudo update-alternatives --install /usr/...
2018-10-22 16:46:50
7663
转载 __asm__ __volatile__内嵌汇编用法简述
__asm__ __volatile__内嵌汇编用法简述 在阅读C/C++原码时经常会遇到内联汇编的情况,下面简要介绍下__asm__ __volatile__内嵌汇编用法。因为我们华清远见教学平台是ARM体系结构的,所以下面的示例都是用ARM汇编。带有C/C++表达式的内联汇编格式为:__asm__ __volatile__("Instruction List" : Output : I...
2018-08-16 17:34:58
598
转载 do {...} while (0) 在宏定义中的作用
如果你是一名C程序员,你肯定很熟悉宏,它们非常强大,如果正确使用可以让你的工作事半功倍。然而,如果你在定义宏时很随意没有认真检查,那么它们可能使你发狂,浪费N多时间。在很多的C程序中,你可能会看到许多看起来不是那么直接的较特殊的宏定义。下面就是一个例子: 1 2 #define __set_task_state(tsk, state_value) ...
2018-08-07 15:54:20
130
转载 C/C++ 混合编程 互相调用
网上这方面介绍的不少,但是有点鱼龙混杂,对初学者而言,信息量太大,反而不容易直接找到自己想要并且正确的,现将比较好的资料整理下,并附上源代码,供初学者参考以及自己后期使用。两个推荐的原文地址,通俗点的: 1.深入理解C/C++混合编程 2.extern “c”用法解析C中想调用C++中的成员函数(包括虚函数),则需要提供一个简单的包装(wrapper),参考: 1.C代码中如何调用C...
2018-07-29 15:27:04
216
转载 在Windows下编写的代码,实时在Linux下编译
方法一: 如何实现在Windows7下编写Linux程序,写完程序以后,不用拷贝文件,直接在Linux(RHEL6.5)机器上编译最新的代码。 1.首先将Windows的代码文件夹设置为共享文件夹: 2.在RHEL6.5上,利用mount命令把Win7下的文件夹给mount到本地的一个文件夹 其中192.168.59.1是Win7的OS,VMTo...
2018-07-26 14:28:58
4431
转载 C和C++混合编程(__cplusplus 与 external "c" 的使用)
第一种理解比如说你用C++开发了一个DLL库,为了能够让C语言也能够调用你的DLL输出(Export)的函数,你需要用extern "C"来强制编译器不要修改你的函数名。通常,在C语言的头文件中经常可以看到类似下面这种形式的代码:#ifdef __cplusplusextern "C" {#endif/**** some declaration or so *****/#if...
2018-07-24 10:26:15
393
转载 编译器 cc、gcc、g++、CC 的区别
gcc 是GNU Compiler Collection,原名为Gun C语言编译器,因为它原本只能处理C语言,但gcc很快地扩展,包含很多编译器(C、C++、Objective-C、Ada、Fortran、 Java),可以说gcc是GNU编译器集合。g++ 是C++编译器。cc 是 Unix系统的 C Compiler,一个是古老的 C 编译器。而 Linux 下 cc 一般是一个符号...
2018-07-24 10:11:02
1650
转载 HTTP请求模型和头信息参考
转载:http://www.cnblogs.com/riky/archive/2007/04/09/705848.htmlHTTP请求模型一、连接至Web服务器一个客户端应用(如Web浏览器)打开到Web服务器的HTTP端口的一个套接字(缺省为80)。例如:http://www.myweb.com:8080/index.html在Java中,这将等同于代码:Soceet socke...
2018-07-17 21:59:53
239
转载 C++重写(覆盖)、重载、重定义(遮蔽)、多态的区别
转载自:https://www.cnblogs.com/DannyShi/p/4593735.html1 重写(覆盖)override override是重写(覆盖)了一个方法,以实现不同的功能。一般用于子类在继承父类时,重写(覆盖)父类中的方法。函数特征相同,但是具体实现不同。重写需要注意:被重写的函数不能是static的,必须是virtual的重写函数必须有相同的类型,名称和参数列表重写函数...
2018-07-13 12:08:25
515
转载 浅析static,const,inline,define的存在价值
参见:http://blog.sina.com.cn/s/blog_4c7fa9dd01000agj.html一 static1) 产生背景引出原因:函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现?最容易想到的方法是定义一个全局的变量,但定...
2018-07-12 17:37:29
228
原创 记一次git使用错误解决方法
如图,我push一直报错,查了一下别人的解决方法,输入:git pull --rebase origin master进行代码合并,然后再重新提交push。
2018-07-10 20:20:14
959
原创 二叉树的三种递归遍历
#include <stdio.h> #include <stdlib.h>#define elemTpye inttypedef struct BitNode{ elemTpye data; struct BitNode *lchild,*rchild;}BitNode,*pBitNode;void CreateBTree(pBitNode b){ b->data=...
2018-07-09 15:27:17
631
原创 快速排序降序排序算法
#include <stdio.h>/* 快排降序排序 *///参数 l为数组的左下标,r为排序数组的右下标,void quick_sort(int a[],int l,int r){ int i=l,j=r; int A=a[l]; while(i < j) { while(i < j && A > a[j]) { j--; } if(i...
2018-05-22 19:06:26
5017
转载 mips符号位扩展和无符号位扩展
MIPS32 指令集架构中,经常会有指令需要将其中的立即数进行符号扩展,或者无符号扩展,一般都是都是将n位立即数扩展为32位。无符号扩展:直接将扩展后的数据的高(32-n)位置为0。符号扩展:将扩展后的数据的高(32-n)位置为立即数的最高位。16位立即数0x80000x1000符号扩展0xFFFF80000x00001000无符号扩展0x000080000x00001000版权声明:本文为博主原...
2018-05-03 18:22:38
6584
转载 深入理解C++中的explicit关键字
深入理解C++中的explicit关键字kezunhai@gmail.comhttp://blog.youkuaiyun.com/kezunhai C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式)。 ...
2018-04-27 16:12:02
202
原创 1009. 说反话 (20)
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。输出格式:每个测试用例的输出占一行,输出倒序后的句子。输入样例:Hello World Here I C
2018-02-07 11:21:39
147
原创 1006. 换个格式输出整数 (15)
让我们用字母B来表示“百”、字母S表示“十”,用“12...n”来表示个位数字n(输入格式:每个测试输入包含1个测试用例,给出正整数n(输出格式:每个测试用例的输出占一行,用规定的格式输出n。输入样例1:234输出样例1:BBSSS1234输入样例2:23输出样例2:SS123#includeint main(){ i
2018-02-06 23:33:49
130
原创 1008. 数组元素循环右移问题 (20)
一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0A1……AN-1)变换为(AN-M …… AN-1 A0 A1……AN-M-1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?输入格式:每个输入包含一个测试用例,第1行输入N ( 1=0);第2行输入N个整数
2018-02-06 21:35:58
185
原创 1007. 素数对猜想 (20)
让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。现给定任意正整数N (5),请计算不超过N的满足猜想的素数对的个数。输入格式:每个测试输入包含1个测试用例,给出正整数N。输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。
2018-02-05 23:38:56
127
原创 1004. 成绩排名 (20)
读入n名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。输入格式:每个测试输入包含1个测试用例,格式为 第1行:正整数n 第2行:第1个学生的姓名 学号 成绩 第3行:第2个学生的姓名 学号 成绩 ... ... ... 第n+1行:第n个学生的姓名 学号 成绩其中姓名和学号均为不超过10个字符的字符串,成绩为0到100之间的一个整数,这
2018-02-04 21:43:28
165
原创 1002. 写出这个数 (20)
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。输入样例:1234567890987654321123456789输出样例:yi san wu#inc
2018-02-04 15:28:44
131
原创 1001. 害死人不偿命的(3n+1)猜想 (15)
卡拉兹(Callatz)猜想:对任何一个自然数n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把(3n+1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n=1。卡拉兹在1950年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证(3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学
2018-02-02 21:47:09
236
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人