一:運算子
除法:
如果都是整數,除數,被除數都是整數,那麼結果:就是整數的商(沒有小數部分的),例如:7/2=3;
如果除數或者被除數其中一個是浮點數,那麼結果就是(條件是:能除盡的,並且小數在基礎資料型別包含下的)完整的商(包含小數部分的):例如:7/2.0=3.500000;
如果想要在printf中,想要取小數點後1位,基本型別是:float----%.1f;如果是double----%.1lf,其他的就是類似(什麼小數點後幾位什麼的,這個數字就是變換著來就行了)
取模:
取模運算子的兩端都是整數
逗號表示式:
逗號隔開的一串表示式,特點:從左向右的依次計算,整個表示式的結果是最後一個表示式的結果,
例如:int a=10;int b=20;int c=0;int d=(c=a-2,a=b+c,c-3); d=5
二:關鍵字
typedef:
1.用於一個已有名字的資料型別,使其更新一個新的名字,讓程式碼變得更加的簡介,例如:在頭部寫上:typedef unsigned int unit;那麼在main裡面
unsigned int num1; 與unit num2;是相同的型別,只不過名字不相同,但是效果一樣的
2.用於結構體上面,把結構體命一個新的名字,例如:
在main裡面 :struct Node n;與 Node n2;的效果是一樣的
static:
1.修飾區域性變數
//在不使用static的時候
#include<stdio.h>
void test(){
int a=1;
a++;
printf("%d ",a);
}
int main(){
int i=0;
while(i<10){
test():
i++;
}
}
這個的結果就是:2 2 2 2 2 2 2 2 2 2
//在使用static的時候呢
#include<stdio.h>
void test(){
static int a=1;
a++;
printf("%d ",a);
}
int main(){
int i=0;
while(i<10){
test():
i++;
}
}
這個的結果就是:2 3 4 5 6 7 8 9 10 11
-
為什麼會有這麼大的差距呢,就是因為static 存在,static修飾區域性變數的時候,區域性變數出了作用域,不會銷燬,本質上就是,static修飾區域性變數的時候,該變數了變數的儲存位置(由區域性變數----->成為靜態變數)。影響了變數的生命週期,生命週期變長,變成和程式的生命週期一樣
-
棧區:區域性變數 |
堆區: |
靜態區:靜態變數 |
2.修飾全域性變數
static修飾全域性變數的時候,這個全域性變數的外部連結屬性就變成了內部連結屬性。其他的原始檔(.c)就不能再次使用這個全域性變數,例如:
test1.c
int num=10;
test2.c
#include<stdio.h>
#include"test1.c"
int main(){
print("%d\n",num);
return 0;
}
這個結果就是:10
如果變成static修飾的全域性變數(num)時,這個全域性變數(num)就是從外部連結屬性變成了內部連結屬性,test2.c這個原始檔不能使用test1.c的內部變數了,例如:
test1.c
static int num=10;
test2.c
#include<stdio.h>
#include"test1.c"
int main(){
print("%d\n",num);
}
結果:報錯,原因,num這個變數沒有定義且不存在
3.修飾函式
這個與修飾全域性變數差不多,函式由原本的外部連結屬性變成了內部連結屬性