實用C 學習筆記2

2021-10-06 05:56:25 字數 4377 閱讀 7830

多檔案共同訪問乙個全域性變數:

①、在其中乙個c/cpp檔案中定義並初始化全域性變數,例如:

int sum = 0;

②、在c/cpp檔案都能訪問到的乙個h標頭檔案中宣告該全域性變數為支援多檔案訪問的:

extern int sum; //此時只是宣告,所以不需要初始化

③、在其他c/cpp檔案中 #include 這個標頭檔案之後,就可以直接使用這個全域性變數 sum 了。

備註:不能在 h 檔案中直接定義這個全域性變數int sum = 0;之前看到很多網友都是這麼做的,這樣的話如果有多個c/cpp檔案 include 包含這個標頭檔案的時候就會提示 sum 重複定義了。所以一定要在 c/cpp檔案中定義該全域性變數,之後在 h 標頭檔案中宣告該全域性變數才行哦。

簡單來說,在a.cpp中定義了全域性變數int num;,要在b.cpp中用這個變數

方法一:在b.cpp加上

extern

int num;

//這時用的是a.cpp中同乙個變數,不是自己另外定義出來的

方法二:新建乙個標頭檔案inc.h,在裡面寫上

extern

int num;

//這時用的是a.cpp中同乙個變數,不是自己另外定義出來的,只是在這裡宣告而已

在b.cpp中加

#include

"inc.h"

static 靜態型別變數:

static 靜態型別區域性變數只初始化一次,之後的呼叫都不進行初始化!

例:

#include

如果是int value = 2(沒有static)

字元陣列的初始化:

方式①:定義之後分別對每個字元初始化;

char szbuf[10]

;szbuf[0]

='h'

;szbuf[1]

='e'

;szbuf[2]

='l'

;szbuf[3]

='l'

;szbuf[4]

='o'

;

備註:未初始化的部分值隨機

方式②:定義即初始化:

char szbuf[10]

=;

或者:

char szbuf[10]

="hello"

;

備註:未初始化的部分值為0(其實是\0字元),要求初始值的個數小於陣列的長度

方式③、自動初始化長度:

char szbuf=

;

如果字串的長度比較長,而且要定義的陣列長度就是字串的長度,那麼就可以使用此方法。

或者:

char szbuf=

"hello friends i am cctry.com"

;

字元陣列與字串的區別:

區別就是字串比字元陣列多了乙個結束標誌的字元:』\0』,這個字元的ascii碼就是0

所以作為乙個字串來說:

有效字元就是結束標誌\0之前的字元。

長度是結束標誌\0之前的字元,

所占用的位元組數或者說所占用的空間,是包含字串結束標誌\0的。

所以一般情況下關於乙個字串的長度不用很顯示的給出或者告訴,直接對當前字串從頭往後找結束標誌\0就可以了,遇到了就表示這個字串結束了。

用上面方式②的兩種語句定義,都滿足字串的條件(最後都是\0)

字元陣列的輸入與輸出:

=;//全都初始化了

因為cout對這個陣列進行輸出時,認為是字串,就會從頭到尾進行輸出,所以直到遇到字串的結束標誌\0才會停止,超出了陣列的長度,就變成亂碼

如果改為char szbuf[5] = ;,就沒有亂碼:

c++中輸出陣列資料分兩種情況:字元型陣列和非字元型陣列

當定義變數為字元型陣列時,採用cout《陣列名; 系統會將陣列當作字串來輸出

當定義變數為非字元符陣列時,採用cout《陣列名; 系統會將陣列名當作乙個位址來輸出

如果需要輸出陣列中的內容,則需要採用迴圈,逐個輸出陣列中的元素

字串連線函式:strcat作用就是將第二個引數的字串連線到第乙個引數的字串結尾,

所以在字元陣列中,要保證第乙個引數的字元陣列大小夠用,能裝的下第1個和第2個字串的總長度才行,不然就會發生記憶體溢位啦!

返回值是第乙個字串的首位址

字串拷貝函式:strcpy

其作用就是將第2個引數的字串拷貝到第乙個引數的字元陣列中,

所以在字元陣列中要保證第1個引數的字元陣列大小夠用。注意:第2個引數的結束符 『\0』 也會拷貝過去哦。

(與上乙個的區別,strcat是把第二個接在第乙個後面,strcpy是用第二個覆蓋掉第乙個)

但並不是全覆蓋,只覆蓋第二個的長度,剩下的還是第乙個的。但是輸出時,cout遇到\0就停了,所以後面的沒有輸出

字串比較函式:strcmp

其作用就是對比第1個和第2個引數的字元陣列字串,逐個字母比對,直到字串結束(遇到\0)。即比較每個字母的ascii碼值。

當第1個引數大於第2個引數,返回 > 0 的數,

當第1個引數小於第2個引數,返回 < 0 的數,

當第1個引數和第2個引數相等,返回0

字串求長度函式:strlen

其作用就是求得引數字串的長度,通過返回值返回。

(這個長度是指有效長度,不包括 \0)

sizeof求得的是占用位元組數

例:

char s1[50]

="abc"

;int s2[10]

;int length =

strlen

(s1)

;// length=3

int size =

sizeof

(s1)

;//size=50 (乙個字元佔乙個位元組)

size =

sizeof

(s2)

;//size=40; (因為s2有10個int,乙個int佔4個位元組)

小作業:

不用系統提供的strcat函式,自己使用字元陣列編寫乙個函式,實現兩個字串的連線功能。

Linux學習筆記 2 使用者管理 實用指令

linux系統是乙個多使用者多工的作業系統,任何乙個要使用系統資源的使用者,都必須首先向系統管理員申請乙個使用者賬號,然後以這個賬號的使用者身份進入系統 linux的使用者至少要屬於乙個組。指定 修改密碼 刪除使用者 查詢使用者資訊 切換使用者 使用者組 類似於角色概念,共性使用者所屬乙個組別 組別...

C 學習筆記 2

ref 和out 都是是傳遞引用,out是返回值,兩者有一定的相同之處,不過也有不同點。使用ref 前必須對變數賦值,out不用。out的函式會清空變數,即使變數已經賦值也不行,退出函式時所有 out引用的變數都要賦值,ref引用的可以修改,也可以不修改。下面是使用 out和 ref進行陣列修改的例...

C 學習筆記(2)

定義 namespace a namespace a 系統會自動合併這兩個 使用時在前面加上using namespace a 或者a var來呼叫命名空間a中的變數和函式。wchar t雙位元組型變數,佔據2位元組,而char只佔據1位元組 wchar t wc l 中國 setlocale lc...