![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法、效率
那是大哥
人
展开
-
有關指針類型的一點討論
有關指針類型的一點討論指針是C語言的重要組成部分,也是它迷人之所在。在C語言裏,指針同變量一樣也是有類型的,比如int MyInt語句聲明了一個整型的變量MyInt,int * MyPoint語句聲明了一個指向整型數據的指針,等等,於是乎就引出了指針類型轉換的問題。原則上來説數據放在内存中無所謂什麽類型,都是以二進制方式存放的,你解釋成什麽就是什麽,但是有個長度問題。比如有個指針指向内存0原创 2006-12-28 00:47:00 · 666 阅读 · 0 评论 -
今天看了一道題,頗有些驚異
今天看了一道題,頗有些驚異。是這樣的:char str[] = "abcdefg";int *ptr = (int *)str;//一*ptr = 0x31323334;//二printf("str=%s ", str);//三 大夥兒認為如何?三處應該打印出什么結果?呵呵,是str=4321efg什么原理?我們來看看。str是一個含有8個char元素的數組,每原创 2007-08-26 18:40:00 · 537 阅读 · 0 评论 -
關于調試循環、遞歸的一點技巧
前幾天在網上看到一篇文章,一位老兄說他有一次調試程序,一個循環跟蹤到七十多趟(循環了七十多趟)才找到問題,累得他要死。今天我調試自己的遞歸同樣遇到了這樣的問題,大概在反復調用自己n多次時出現了問題,可VC 只能一步步的來,怎么辦?我想了幾個辦法,可以解決這個“調試難”的問題。(會用__DEBUG__宏的同志可以不看第一步)1、在你要調試的函數的文件的適當位置加入宏:#ifdef原创 2007-10-19 17:53:00 · 580 阅读 · 0 评论 -
專題:連連看-戊-核心算法(一)
隔了這麼久終於有時間來研究以前連連看的算法問題了,說來也慚愧。(前文請參看《專題:連連看-甲-乙-概述-建模》及《專題-連連看-丙-丁-算法(一)-矩陣梳理(一) 》) 我們來考慮連連看自動找牌自動找路的問題,先看看下圖。棋盤中卡片1與卡片2可以消元,相鄰的兩個同種元素可以消元。現在就有個問題:給定一個元素甲,我們先從哪個方向“探路”呢?這裡必須有個約定,比如從右方向起原创 2007-10-19 11:50:00 · 990 阅读 · 0 评论 -
專題:連連看-戊-核心算法(二)
接前文(專題:連連看-戊-核心算法(一)),開始動手寫代碼后就會發現實際上上面一篇的偽碼還是有很多問題的,我們一步步的來。先來個圖。 看圖一中甲元素要消元的情況。甲的出路有兩條,向右或向下,也就是說如果甲是發起方它可以發起向右或向下的探路。再看乙丙,乙有三條出路,丙四個方向都可以走,不過要注意,以上說的都是對發起方來講的,想想,如果是接收方情況還如此嗎?不是。比如對丙原创 2007-10-25 15:55:00 · 633 阅读 · 0 评论 -
專題:連連看-戊-核心算法(三)
經過前面兩篇的討論,理論的東西也差不多了,如果你还不明其中机理,可参看專題:連連看-戊-核心算法(一)及專題:連連看-戊-核心算法(二) 。本篇關注程序實現,基本上就直接放代碼了。先看看定義的頭文件把。LKK.h //連連看(遊戲本身)全域性的頭文件#ifndef __LLK_H__#define __LLK_H__#define __DEBUG__#include stdi原创 2007-10-25 17:01:00 · 532 阅读 · 0 评论 -
堆棧上的緩衝區溢出一
溢出是個很有意思的話題,緩衝區溢出又是當中最常見的一種情況。如果把緩衝區放在堆棧上,造成溢出,那麽有可能情況就變得很妙,比如程序就執行了你的ShellCode,gogo!先來講將基本原理。堆棧大家都很熟悉了,這裡就不說了,我們來復習一下程序的函數/過程調用。函數/過程是通過堆棧完成的,之所以這麽說是因爲程序通過堆棧向被調用的函數傳遞參數,當然沒有參數就不傳,同時使用堆棧來保存現場,待被原创 2007-10-15 11:14:00 · 1096 阅读 · 0 评论 -
一個printf函數引發的死機
今天同事解決了一個問題,頗有啓發,拿出來共賞之。大家都熟知printf函數,有%s、%d、%p、%u等等參數,當然你也可以直接printf("某某字符串"),或者:char str[] = "xxxxxx";printf(str);如果這樣寫,會編譯不過:pr原创 2011-09-16 16:12:39 · 1715 阅读 · 0 评论 -
字節對齊在網路中需要注意的事項
以前在單片機上寫一個PPPoE的協議棧,發送的幀中總是多出一個字節,導致協商失敗。抓包發現該字節還是變化的。。。後看來走讀代碼、查看結構,忽然想起,該單片機是16位的,默認按量字節對齊,結構中出現了一個1字節的空洞,發包時把這個空洞也發出去了,後來改成按1字節對齊問題解決。這原创 2011-08-31 00:03:13 · 599 阅读 · 0 评论 -
【數據結構】IP地址配置存儲探究
單純的IPv4地址是個32位的整數,正好用一個ULONG存放,子網掩碼也是如此,這沒問題。可是存在大小端的情況,很多時候我們還需要使用點分十進制的格式,子網掩碼還有進行長度轉換的需求,如255.255.0.0 -> 16,這樣一來就複雜了。不論如何,我們還是想使用較簡單的辦法,使用一個ULONG,在這裡我們寫作VOS_U32,於是乎我們似乎可以這樣:typedef VOS_U32 IPAD原创 2012-03-17 16:24:24 · 967 阅读 · 0 评论 -
統計字符串中最長數字串個數
統計一個輸入字符串中最長的連續數字的個數,并提取此最長數字串復制至另一數組。例如輸入字符串"a123b1234567c9d",則函數應該返回7,并復制"1234567"到另一個數組中去。實現如下: #include #include unsigned int ContinuousMax(const char *szStr, char *szContinuousStr){ //原创 2007-08-24 14:53:00 · 649 阅读 · 0 评论 -
分字段讀取函式
你經常會需要這樣的函式:把字符串:"字段一,字段二,...字段N"(逗號分隔開)中的字段分別讀取到字符串Field_1、Field_2...Field_N中,咋辦?用如下這樣一個函式吧~ //字段分離讀取函式BOOL GetFields(TCHAR *wLine, TCHAR **FieldArray, const unsigned char FieldN)...原创 2007-08-06 13:52:00 · 620 阅读 · 0 评论 -
指針之内存分配
指針之内存分配 我個人對内存分配之事宜十分之感興趣,想起來了便把一些經驗什麽的寫出來,也可供大家參考。 首先,從簡單的說起。 int myint, * p_myint; //聲明了兩個變量,一個整型的變量myint,一個指向整形變量的指針變量p_myint 兩個變量都未初始化。 int myint = 100, * p_myint; //聲明了兩個變量,一個整型的變量myint原创 2007-01-04 14:15:00 · 641 阅读 · 0 评论 -
自動生成鏈表
前幾天因爲測試需要寫了這段自動生成一個鏈表的代碼,貼上來興許以後用得着。 typedef struct card...{ card * previous; char index; card * next;}CARD;CARD * cpHead, * pCurrent, * pTmpCard;char i;//生成4個節點的鏈表,表頭用指針cpHead標記for(i =原创 2007-02-13 01:26:00 · 584 阅读 · 0 评论 -
一道小題
1)某計算機字長32,容量8mb,求按雙字編址,求它的尋址範圍? 0~~1m 2)某計算機字長16,容量2mb,求按半字編址,求它的尋址範圍? 0~~2m 其中和字長有没有關係,半原创 2007-01-14 23:29:00 · 656 阅读 · 0 评论 -
專題:連連看-甲-乙-概述-建模
連連看是個不錯的遊戲,好玩 規則又不復襍。每每玩QQ連連看時我都不可思議那些高手的敏捷,屢屢敗下陣來,於是有了寫一個自動玩連連看程式的想法。首先归纳一下遊戲規則:“棋盤”可按矩形擺放M x N 張牌,發牌時任意擺放K種牌共X張,其中每种牌都為2的整數倍。這些牌中相同種類的牌(比如花色相同)可以兩輛消去,儅牌消完時遊戲結束(勝利)。消牌規則:1、同種牌;原创 2007-01-16 15:58:00 · 849 阅读 · 0 评论 -
專題-連連看-丙-丁-算法(一)-矩陣梳理(一)
丙-算法(一)前文我們得到了棋盤矩陣M,M中同種元素的消元遵循連連看的原則:相鄰或者連綫彎折小於等於兩処。我們可以從矩陣的第一列第一行的那個元素分析起,如果不等于0就考慮消元。對於消元,其過程稍顯複雜。我們需要做以下判別工作:一、元素非0;二、四周非全遮擋(封閉);三、存在非己同類元素;四、非己同類元素四周非全遮擋(封閉);五、連綫彎折処不大于2。五個條件同時滿足及原创 2007-01-15 20:36:00 · 955 阅读 · 0 评论 -
C語言中volatile關鍵字
c語言中volatile關鍵字volatile關鍵字是一種類型修飾符,用它聲明的類型變量表示可以被某些編譯器未知的因素更改。用volatile關鍵字聲明的變量i每一次被訪問時,執行部件都會從i相應的內存單元中取出i的值。沒有用volatile關鍵字聲明的變量i在被訪問的時候可能直接從cpu的寄存器中取值(因為之前i被訪問過,也就是說之前就從內存中取出i的值保存到某個寄存器中),之所以转载 2007-03-23 09:01:00 · 44265 阅读 · 3 评论 -
自編幾個有用的C字符串、IP、端口處理函數
1、返回字符串最後一個字符之指針char *FindStrEnd(char *)//返回字符串最後一個字符之指針inline char *FindStrEnd(char * str)...{ return (str + strlen(str) - 1);}例子:char *str = "This is a sample!";char *ptr;ptr = Fi原创 2007-06-22 11:56:00 · 870 阅读 · 0 评论 -
指針、常量指針等等之再議
剛才看了 深入探討常量、指向常量的指針,常量與變量的區別(http://dev.csdn.net/author/justrun2005/4df3579cbb044b9fa989231379db9661.html )一文,覺得還要再補兩句。首先你在vc6裏新建一工程,寫上char *q = "Hello";*q = W;這麽兩句,編譯連接是通的過的,不論是調試模式還是原创 2007-04-02 12:35:00 · 720 阅读 · 2 评论 -
++?唉~~~
這幾天研究了一下C++,唉~~~~這就是我的感覺。。。老子從來不用++,看了一下覺得很不好,從而決定繼續不++。++搞得也很麻煩,編譯又重新搞了些東西,在視窗下一不小心就編譯成++的形式了,在連接時連不上,比較煩。給別人寫庫,你告訴他你是C寫的,他還老大不高興,說要重新定義連接啥地麻煩,那么大家同意就不要++嘛,代碼也統一,不要看得暈頭轉向地,什么類不類,真累。。。老子前些時匯編也是原创 2007-07-14 18:03:00 · 535 阅读 · 0 评论 -
對絕對地址的操作
嵌入式系統中往往需要讓程序跳到內存的某個地址去執行,比如想讓程序跳轉到絕對地址是0x100000去執行,應該怎麼做?這樣:*((void (*)(void))0x100000)();即可。解釋一下,想讓程序跳到某個絕對地址去執行得用函數指針,這或許也是函數指針的一個妙用吧!語句void(*)(void)聲明了一個返回值是void、無參數的函數的函數指針,這個指針沒有名字原创 2007-10-15 15:20:00 · 1819 阅读 · 1 评论