C 幾個特殊的函式和一些作用域問題

2021-10-19 17:58:51 字數 3044 閱讀 3122

關係運算子的優先順序大小

<, >, <= ,>=這四個優先順序相同,並且高於==和!=

它們的運算子大小比較:!(非)>算數運算子》關係運算子》&&和||>賦值運算子。

迴圈:

switch:括號裡面必須為整數或者字元型

case:後面加上 常量:語句;break;

break表示跳出switch語句,要是沒加就無條件執行後面的語句。

雖然有scanf、printf、getchar、putchar等輸入輸出方式,但是有些不安全,這兩個輸入輸出方式是安全的!

輸入函式fgets:

形式:char *fgets(char *s, int size , file *stream)

char *s : 就是存放陣列名。

size:指的是能接收多少個字元。

file *stream -stdin

功能:從stream中讀取字元,儲存到s中,知道存現換行、讀到檔案結尾或者size-1個字元為止,最後會自動加上 『\0』 作為字串結尾符。

注意事項:換行符也能被儲存進去,佔乙個位置,但是出現換行的時候就結束輸入!!!

輸出函式fputs:

形式:int fputs(const char *str,file *stream)

char *str 就是陣列名

file *stream -stdout

功能:就是向螢幕輸出字串,並且字串結尾不加結束符 『\0』

注意事項:不會預設加換行符

strlen函式

形式:size-t strlen(const char*str)

char *str 就是陣列名

功能:計算指定字串長度,不包括結束符 『\0』

計算長度的原理,從首元素開始到 『\0』 結束(也許字串中間有結束符,但是它就不計算後面的了)

strcpy函式

形式:char *strcpy(char *dest,char *src);

char *dest -目標陣列名。

char *src -源陣列名。

功能:將src所指向的字串拷貝至dest中, 『\0』 也會拷貝過來。

原理:從首元素開始,』\0』結束。

strncpy函式

形式:char *strncpy(char *dest,char *src, size_t n);

char *dest -目標陣列名

char *src -源陣列名

size_t n -前n個

功能:將src所指向的字串的前n個字串拷貝至dest中,是否拷貝 『\0』 看指定的長度是否包含 『\0』 決定。

strcmp函式

形式:int strcmp(const chars1,const char*s2);

char *s1 -陣列名1

char *s2 -陣列名2

功能:比較s1和s2的大小,實際上比較的是字元的ascii

原理:按元素依次比較。

strcat函式

形式:char strcat(chardest,char*src);

char *dest -陣列名1

char *src -陣列名2

功能:將src的字串連線到dest,』\0』也會追加上去。

strncat函式

形式:char strncat(chardest,char*src,size_t n);

char *dest -陣列名1

char *src -陣列名2

功能:將src的字串前n個字元追加到dest尾部,』\0』也會追加上去。

return和exit()的區別

在主函式中作用一樣,但是在子函式中,執行return就是結束子函式,執行exit()就是結束程式。

靜態區域性變數

函式中的區域性變數在函式呼叫結束後仍然保持原始值。

注意:1、靜態區域性變數的初始化只會執行一次。

2、靜態區域性變數在函式呼叫前就已經分配記憶體空間了。

3、當離開{}時,靜態變數的值不會自動釋放,而是等到程式結束後才釋放。

4、靜態區域性變數的作用域時當前{}內,離開此處{},則無法使用此變數。

5、如果靜態區域性變數不初始化,則系統則會預設初始化為0。

6、靜態區域性變數只能使用常量初始化。

普通區域性變數和靜態區域性變數的區別

1、普通只有在執行到定義變數的語句時,才會分配記憶體。static區域性變數在編譯階段變數已經分配記憶體。普通會在離開它所在的{}之後就會自動釋放,static在程式執行完畢才釋放。

2、從初始化角度看:普通不初始化,如果不初始化它的值就是隨機值。static區域性變數如果不初始化它的值就是0,static區域性變數初始化語句只會執行一次,並且必須使用常量。

全域性變數

在函式外面定義的變數被稱為全域性變數,被本檔案以及其他檔案所呼叫,不同檔案的全域性變數變數名不能一樣。(全域性變數的宣告:當定義的全域性變數在將要呼叫它的函式的後面要提前宣告:extern int a;普通區域性變數不需要宣告)

普通全域性變數和靜態全域性變數

1、static全域性變數和普通全域性變數作用域是不一樣(檔案作用域)

2、extern只使用普通全域性變數。

3、普通全域性變數所有檔案都能使用,提前宣告即可。

4、不同檔案只能出現乙個普通全域性變數的定義。

5、static全域性變數只能在本檔案中使用,不能再其他檔案中使用。

6、乙個檔案只能有乙個static全域性變數的定義,不同檔案之間,就算名字一樣,也是沒有關係的兩個變數。

全域性函式和靜態函式

1、一般預設為是全域性函式,但是可以通過static宣告函式為靜態函式。

2、將函式定義為static以後,就意味著這個函式只能在本檔案中使用(定義函式的檔案),其他檔案不能呼叫。

關於函式返回值作用域的一些思考

函式中的變數的作用域只能是在這個函式內,在arc環境內,例如,uiview methodview的作用域只能在這個函式內,所以按理說應該在函式結束後就會將view的記憶體計數減一,但是實際上並不是這樣,如下測試 void viewdidload uiview method 輸出的view的寬度是10...

c 語言中一些特殊函式的整理

1 gets 函式 gets認為回車 是輸入結束標示,空格不是輸入結束標示,所以用gets這個函式就可以實現輸入帶空格的字串 gets和scanf一樣存在緩衝區溢位的問題 int main gets ch int len 0 while ch len len printf s ch return 0...

php一些基本的函式作用

一 ifnull expr1,expr2 作用 如果expr1不是為null,則返回expr1 否則返回expr2 二 spintf 作用 把格式化的陣列寫入某個字串函式的原型 三 list 作用 用陣列中的元素為變數賦值 注意 這裡的陣列變數只能為數字索引的陣列,且假定數字索引從 0 開始。引數說...