C語言基礎-關鍵字
return:返回函數的返回值
extern:表明該變量或函數都是在別的文件中定義的
提示編譯器在其他文件中尋找定義。
extern “c”:爲了能夠正確實現C++代碼調用其他C語言代碼。
//不可以將extern"C" 添加在函數內部
break;continue;auto
break:跳出代碼體(如循環體和if代碼體)
continue:跳過本次循環,執行下一次循環
auto:局部變量(自動儲存)
sizoef計算表達式或數據類型的佔用字節數
const(修飾的常類型數據)、static(定義靜態變量)、final(限制繼承、覆蓋)
一、const(修飾的長類型數據):
爲了取代預編譯指令,消除它的缺點,同時繼承它的優點,常類型的變量或對象的值是不能被更新。
const常量有數據類型,編譯器可以進行類型安全檢查,調試工具可以對const常量進行調試。
const char*
的意思是創建一個指向char類型的指針且不能更改指向地址上的值,
char* const
則是不能更改指向的地址;
char* const p : 定義一個指向字符的指針常數,即const指針,常量指針。
const char* p :定義一個指向字符型常量的指針。
二、static(定義靜態變量):
1.靜態存儲類型:
函數內定義(靜態局部變量):僅定義一次,變量存在內存的靜態區,函數結束靜態變量的值也不銷燬,函數下次運行時能仍用。
函數外定義(靜態全局變量):變量的作用域只在定義該變量的文件中,不能被其他文件通過extern引用。
2 內部鏈接屬性
靜態函數只能在聲明它的源文件中使用。
三、final(C++):
1、用來修飾類,讓該類不能被繼承,理解:使得該類終結!
final關鍵字只能放在類名的後面!
class XiaoMi2 final {
XiaoMi2(){}
};
2、修飾虛函數,防止其被覆蓋(重寫)。理解:使得該功能終結!
final只能放在放在函數符()的後面,只能用來修飾虛函數,不能用來修飾普通的函數!
class XiaoMi {
public:
virtual void func() final;
};
typedef換名
typedef(爲一種數據類型定義一個新名字),包括基類型/自定義類型(struct等)
1.typedef int A;
⇒以後A出現等同於int出現(替換字符),A是類型
2.typedef struct str A;
⇒struct str是一個定義的結構體類型,換名爲A(也是類型)
3.typedef struct str {}*A;
等同於typedef (struct str *)A
A是 指向struct str類型的指針類型
4.typedef int A[5];
等同於typedef int[5] A;
A是一個指向五個整形變量的數組類型
if語句(非零即執行)
布爾變量:if(false) 不執行後面的語句
true被翻譯(定義)爲1,false被翻譯爲0
也就是說if本質上判斷的是否爲0
指針變量:if(NULL) 不執行後面的語句
NULL被定義爲0
注意未賦值(野指針,隨機指向),會執行後面的語句
整形變量:if(0) 不執行後面的語句
注意int a;if(a) 會執行後面的語句
a隨機指向一個數字,有相應的內存空間,不爲0
if(-1),if(100) 會執行後面的語句
java中僅支持if(bool表達式)
switch case
switch語句原理:跳轉到caseX位置執行剩下的語句,直到最後或者遇見break爲止。
switch case會生成一個跳轉表來指示實際的case分支的地址,而if…else卻需要遍歷條件分支直到命中條件,
int k=1;
switch(k)
{
case 1:
case 2: printf("執行2");
case 3:printf("執行3");break;
case 4:printf("不執行4");
}
先跳轉到case,沒有再跳到break執行剩下的語句
int k=3;
switch(k)
{
case 1:
default: printf("不執行default");
case 3:printf("執行3");break;
}
循環結構
while(表達式)
其中,表達式是循環條件,語句爲循環體。
計算表達式的值,當值爲真(非0)時,執行循環語句,然後在判斷表達式,直到表達式爲假(0)時結束循環。
while(2)
{
cout<<"hello";break;
}
do語句;while (表達式);
先執行循環語句一次,在判別表達式的值,若爲真,則繼續循環;否則中止循環。
do-while 至少要執行一次循環體
do{
cout<<"hello";
}
while(0);
for循環(for中聲明的變量作用域只在for中)
形式:for(; ; ) 語句;
一般語法格式:
for(初始化;條件表達式;增量){循環體}
其中,表示式可以省略,但是分號不可省略。
表達式1:初始化,是一個賦值語句,它用來給循環控制變量賦初值;
表達式2:條件表達式,是一個關係表達式, 它決定什麼時候退出循環;
表達式3:增量,定義循環控制變量每循環一次後 按什麼方式變化。
循環區別與轉換
for:知道循環次數,先判斷後循環
while:不知道循環次數,先判斷後循環
dowhile:不知道循環次數。先循環後判斷
while有時候不能換成for,for都能換成while。
因爲for循環適用於已知循環次數,while循環還適用於未知循環次數的時候
跳過循環(break、continue)
跳過當前循環:
1)使用continue來跳過當前循環,直接進入下個循環
2)使用break來跳出當前循環;結束當前for循環
跳出多重for循環:
1)label語句
跳出多重for循環:
jump:
for (var i = 0; i < 3; i++){
for (var j = 0; j < 3; j++){
if (i === 1 && j === 1) {
break jump;
}
跳出代碼塊:
jump: {
console.log(1);
break jump;
console.log('不會輸出');
}
2)使用function
function jumpFor() {
for(var k=0;k<8;k++){
for(var j=0;j<4;j++){
if(k == j ){return false;}
console.log(k,j)
}
}
}