原创 函數調用原理—棧幀

         關於棧幀的背景知識        棧在地址空間中是向下生長,向下生長是指是從內存高地址到低地址的路徑延伸,棧有棧頂和棧底,所以棧頂的地址要比棧底的地址低,對於x86體系的CPU而言,其中寄存器ebp可稱爲“幀指針”或“基

原创 C語言中字符串系列的函數實現以及注意事項

**str系列函數的由來** 字符串是一中重要的數據類型,但C語言並沒有顯式的字符串數據類型,因爲字符串以字符串常量的形式出現或存儲於字符數組中。字符串常量很適用於那些不會對它們進行修改的程序。所有其他字符串都必須存儲於字符數組或

原创 動態多態以及多態調用過程

        多態分爲靜態多態與動態多態。靜態多態包括函數重載,泛型編程。動態是虛函數的使用。         靜態多態是指編譯器在編譯期間完成的,編譯器根據函數實參的類型(可能會進行隱式類型轉換),可推斷出要調用的那個函數,如果有對

原创 Linux下文件權限問題

       首先,文件權限的訪問者分爲三類:A:文件和文件目錄的所有者,B:文件和文件目錄的所有者所在組的用戶,C:其他用戶。       下面我們來看看文件訪問的基本權限:1.讀權限:Read對文件而言,具有讀取文件內容的權限;對於目

原创 關於拷貝函數的實現解析

關於拷貝函數分爲兩類,一類是strcpy,strncpy,第二類是memcpy,memove,通常情況下,第一類只能處理char,char*的字符串類型,第二種可以處理任意類型,它們四個函數都在C語言的庫函數中,頭文件爲string.h

原创 類型萃取

         在C++中,我們可以通過typeid來獲取一個類型的名稱,但是不能拿來做變量的聲明。在C++中,我們可以通過類型萃取的方式來對內置類型和普通類型進行區分。例如將要看到的例子,如果是內置類型,string類存在淺拷貝的問題

原创 單鏈表C語言實現

          單鏈表相比於順序表來說,優點在於頭部,中間插入比較高效,但操作較爲複雜,空間利用率低,並且CPU順序表比鏈表緩存效率高。下面來看代碼實現: #include<stdio.h> #include<assert.h> #i

原创 Linux系統下粘滯位的使用

           粘滯位(Stickybit),或粘着位,是Unix文件系統權限的旗標。最常見的用法在目錄上設置粘滯位,如此一來,只有目錄內文件的所有者或者root纔可以刪除或移動該文件,如果不爲目錄設置粘滯位,任何具有該目錄寫和執行

原创 程序環境(編譯(預處理),鏈接)

 在ANSIC的任何一種實現中,存在兩個不同的環境。 第一種是翻譯環境,在這個環境中源代碼被轉換成可執行的機器指令。第二種是執行環境,它用於實際執行代碼。 翻譯階段的幾個步驟: 1.組成一個程序的每個源文件通過編譯過程分別轉換成目標代碼。

原创 Linux中find指令

          當我們想要在Linux中查找某個文件,但不知道放哪裏了,我們可以使用下面的命令來搜索:          which       查找可執行文件位置          whereis    查找文件的位置      

原创 繼承

        繼承是面向對象程序設計使代碼複用的最重要的手段,它允許程序員在保持原有類特性的基礎上進行擴展,增加功能。          三種成員訪問限定符:public,protected,private;繼承關係則也有三種:pub

原创 關於String類淺拷貝引用計數問題

          前面我們探討了String類中深淺拷貝問題,相比於淺拷貝來說,深拷貝的效率較低,在深拷貝中,每拷貝一個對象就需要開闢空間和釋放空間,賦值運算符重載也一樣需要重新開闢和釋放空間。可是當拷貝和賦值的對象只用於"讀",而不是

原创 簡單實現靜態/動態順序表

              靜態順序表操作較爲簡單,空間利用率高,支持隨機訪問,但頭部中間插入元素刪除數據效率很低,時間複雜度O(N)(除尾插尾刪),裏面需要注意的是排序的實現,以及二分查找,這些都是面試中常考的點。代碼如下: #pra

原创 關於string類的深淺拷貝問題

             首先,先看一下下面的代碼會出現什麼問題?      class String { public: String(const char* data = "") { if (NULL == data) {

原创 一入編程,後會無期

       恩,我叫谷明嶽,自認爲是最像文科生的理工男,因爲還是比較喜歡文字 ,喜歡歷史等等。可是也許是天意,稀裏糊塗的報了物聯網專業,然後被錄取,大一大二就立志幹什麼都可以,就是不當程序員,覺得很枯躁,很辛苦。可是到大三了,真的要考慮