多檔案共同訪問乙個全域性變數:
①、在其中乙個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...