原创 go語言版的猜數字遊戲

猜數字(Bulls and Cows)是一個經典的小遊戲. 程序先產生4位各不相同的隨機數,然後用戶輸入0-9四位各不相同的數字,程序將輸入的數字與隨機數進行對比,位置和數字對應相同者提示爲xA,數字相同而位置不同者提示爲xB,

原创 彙編代碼中lea指令的另一種使用

今天看彙編代碼的時候無意看到了一個lea指令的巧妙用法,覺得很有意思,有必要記錄一下: 先看下面的C代碼:#include<stdio.h> int b=1; int main(){ pr

原创 調試器的原理-詳解ptrace函數及fork父子進程跟蹤實例

最近仔細研究了一下linux調試程序的原理.gdb是linux下最爲強大的調試工具,而strace可以攔截程序執行過程中的系統調用.他們的背後都隱藏了一個強悍的支持函數ptrace().調試程序過程中我們可以單步執行,逐步檢查程序的輸入輸

原创 求解二叉樹所有節點的深度

如何求解一個二叉樹所有節點的深度?常見的算法是採用遞歸求解二叉樹的最大深度,算法如下: int maxDepth(node *p) { if (!p) return

原创 C語言以數組和結構體傳參

C語言函數調用時的傳參操作在32位x86機器上依賴棧進行.而在x86_64的機器上使用了部分寄存器作爲輔助,但如果參數過多,寄存器不夠使用,此時也必須藉助於棧操作實現傳參.儘管C語言對函數傳遞參數的個數沒有明確限制(依編譯器實現而定:ht

原创 java版猜數字遊戲

平時自己對c語言很熟,編寫代碼一直是面向過程,對java或面向對象完全不熟。最近花了一天時間學習了一下java基本語法,然後拿猜數字這個經典遊戲練練手。個人感覺其實對於一門陌生語言,萬變不離其宗,哪怕面向對象也好,摸清代碼的執行流程,弄明

原创 C語言字符串數組與字符串指針詳解

字符串數組與字符串指針在使用上有很多相似的地方,導致對兩者的理解容易混淆.下面我們將從彙編的角度來詳細審視一下兩者的區別. 先看下面一段代碼: /*file name: test.c*/ #include<stdio.h> char *g

原创 一個直接插入排序算法程序

直接插入排序,算法簡單,程序易編制,但隨着數組長度的增加,搜索時間會增加,移動的元素會增多.因此這種算法適合排序數組長度較短的情況. 初始:23,45,1,0,-45,13,1,34 1:      [23],45,1,0,-45,13,

原创 go語言實現的簡單web服務器

go語言讓web服務器實現和部署變得異常簡潔.終於可以拋開亂七八糟的項目結構和體積龐大的IDE,一窺其基本原理. 首先是一個簡單的服務器實現代碼,如果是GET請求,則回送一條This is a GET request消息,如果是POST

原创 Check whether userfaultfd is available

    I have been focusing on linux for several years, most time I read articles blogged by others and found they were g

原创 一個二叉排序樹的實際例子

用二叉排序樹實現的將亂序輸入字母按從小到大排列,無重複輸出項. #include<stdio.h> #include<stdlib.h> #include<strings.h> typedef struct node{     cha

原创 C語言函數內static關鍵字詳解

static關鍵字有兩類使用:函數外使用和和函數內使用,其中函數外使用主要用來限制被修飾的函數或變量作用域爲本文件,沒什麼可多說的,下面重點說一下static關鍵字在函數體內的用法. 如下面的代碼: #include<stdio.h> v

原创 一個複雜的堆排序程序

用堆排序的方法實現將數組中的數字從小到大排列. 編譯器:gcc, 編譯環境:32位系統可以正常編譯; 如果是64位系統請使用 -m32參數, 或修改宏定義中的彙編代碼部分. #include<stdio.h> #include<stdl