日常筆記 C C

2021-08-20 16:00:03 字數 2822 閱讀 3442

一、class和struct有什麼區別

這裡有兩種情況的區別:

1)c語言的struct和c++的class區別

這種情況下,c語言的struct結構體就像是一種複雜的資料結構型別定義,struct中只能定義資料成員,不能定義函式。

舉例:下面這段**在c語言中

struct point

};

上面的**會產生編譯錯誤,是因為c語言並不支援結構體裡面定義函式成員。

2)c++中的struct和class的區別

這種情況下,結構體和類基本上是相似的,先看下面的**:

#include using namespace std;

//類class cpoint

{ int x;//預設為private

int y;//預設為private

void print()//預設為private

{cout<<"point:("<< x << ","<< y <<")" 《在上面的程式中,struct還有建構函式和成員函式。其實它還擁有class的其他特性,例如繼承和虛函式等。c++中的struct擴充了c的struct功能。

我們編譯上面的**,發現編譯錯誤全部都是因為訪問private成員引起的。由此可知,class中預設的成員訪問許可權是private的,而struct中則預設是public許可權。

總結:c語言的struct與c++的class區別:struct只是一種複雜的資料型別定義,不可以用於物件導向程式設計。

c++中的struct與class的區別:對於成員訪問許可權而言,class預設是private的,而struct中則預設是public的。

二、常見檔案系統 系統函式

1、fcntl  檔案控制  

int fcntl(int fd, int cmd);

fcntl()針對(檔案)描述符提供控制.引數fd 是被引數cmd操作的描述符.

針對cmd的值,fcntl能夠接受第三個引數int arg

2、open  開啟檔案  

int open(const char * pathname, int flags);

int open(const char * pathname, int flags, mode_t mode);

pathname是路徑,flags是與開啟方式相關的一些標誌,mode是模式選擇

3、creat  建立新檔案 

int creat(const char * pathname, mode_t mode);

4、close  關閉檔案描述符

int close(int fd);

5、read  讀檔案  

ssize_t read(int fd, void * buf, size_t count);

buf是目標快取區,count是位元組大小,從檔案中讀到快取區中

6、write  寫檔案  

ssize_t write(int fd, const void *buf, size_t nbyte);

buf是指定的快取區,nbyte是大小,從buf中寫到檔案中

7、readv  從檔案讀入資料到緩衝陣列中  

ssize_t readv(int fd, const struct iovec *iov, int iovcnt);

iov是結構體陣列,每個元素指向乙個緩衝區,iovcnt是陣列中元素的個數

8、writev  將緩衝陣列裡的資料寫入檔案  

ssize_t writev(int fd, const struct iovec *iov, int iovcnt);

9、pread 對檔案隨機讀  

ssize_t pread(int fd, void * buf, size_t count, off_t offset);

buf是用來存放讀取的資料的緩衝區,count是讀取的大小,offset是開始讀取點的檔案偏移量

10、pwrite  對檔案隨機寫

ssize_t pwrite(int fd, const void * buf, size_t count, off_t offset);

buf是用來存放要寫入檔案中的資料,offset是檔案偏移量,從**開始寫入

三、堆和棧的區別

堆:一般由程式設計師分配釋放,若程式設計師不釋放,會造成記憶體洩漏,程式結束時可能由os**,分配方式和鍊錶類似。

棧:由作業系統自動分配和釋放,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。

四、memcpy和strcpy的區別

1)複製的內容不同。strcpy只能複製字串,而memcpy可以複製任意內容,例如字元陣列、整型、結構體、類等。

2)複製的方法不同。strcpy不需要指定長度,遇到 '\0' 結束複製,所以容易產生溢位。memcpy則是根據第三個引數決定複製的長度,限制了大小所以不會出現溢位,是安全的。

3)用途不同。通常在複製字串時用strcpy,而在需要複製其他型別資料時一般用memcpy。

五、volatile與register修飾符的作用

volatile的作用是:

作為指令關鍵字,確保本條指令不會因編譯器的優化而省略,且要求每次直接讀值,volatile表示這個變數會被一項不到的改變,每次使用它的時候都需要重新從記憶體中讀取一遍,確保讀到的值是最新的,不適用於暫存器儲存的副本。

1)並行裝置的硬體暫存器(如:狀態暫存器)

2)乙個中斷服務子程式中會訪問到的非自動變數(non-automatic variables)

3) 多執行緒應用中被幾個任務共享的變數

register修飾符的作用:

暗示編譯程式相應的變數將被頻繁的使用,如果可能的話,將其儲存在cpu的暫存器中,加快其訪問的速度。

C C 日誌的日常使用

作為一名學習程式的學生,在學習中編寫過的 程式,沒有日誌功能,剛開始的時候,完全不知道日誌的使用有什麼意義,感覺特別雞肋,出現問題,我自己除錯一下完全都可以解決的事情,為什麼要通過日誌來輸出。直到後來,才覺得以前的自己好 xx 你懂得 最近寫了乙個注入的程式,你將dll注入目標程式,你完全不能除錯你...

日常筆記 vim

終於要學習 vim 了 為什麼要學習 vim?想想看,當你有乙個 100m 的 txt 文件需要編輯的時候 你相用文字編輯器做?孩子 那速度得等到天荒地老 這裡記錄一下我的 vim 學習過程 筆記。如下,我有下面的接近 900000 行的 txt 檔案,我需要將其中的 850001 行之後的文字貼上...

oracle 日常筆記

1.替換文字 update table name set field name replace field name from str to str where 說明 table name 表的名字 field name 欄位名 from str 需要替換的字串 to str 替換成的字串 2.排序...