第七課c變數
7.1
、c 變數介紹
變數是程式可操作的儲存區的名稱。c
中每個變數都有特定的型別,型別決定了變數儲存的大小和布局,該範圍內的值都可以儲存在記憶體中,運算子可應用於變數上。
變數的名稱可以由字母、數字和下劃線字元組成。它必須以字母或下劃線開頭。大寫字母和小寫字母是不同的,因為c 是大小寫敏感的。基於前一章講解的基本型別,有以下幾種基本的變數型別:
型別描述
char
通常是乙個位元組(八位)。這是乙個整數型別。
int對機器而言,整數的最自然的大小。
float
單精度浮點值。
double
雙精度浮點值。
void
表示型別的缺失。
type variable_list;
在這裡,type必須是乙個有效的c 資料型別,可以是char、w_char、int、float、double、bool 或任何使用者自定義的物件,variable_list可以由乙個或多個識別符號名稱組成,多個識別符號之間用逗號分隔。幾個有效的宣告:
inti, j, k;
charc, ch;
floatf, salary;
double d;行
int i, j,k;
宣告並定義了變數i、j 和k,這指示編譯器建立型別為int 的名為i、j、k 的變數。
變數可以在宣告的時候被初始化(指定乙個初始值)。初始化器由乙個等號,後跟乙個常量表示式組成,如下所示:
type variable_name = value;
幾個例項:
extern int d = 3, f = 5;// d和f 的宣告與初始化
int d = 3, f = 5;//定義並初始化d 和f
byte z = 22;//定義並初始化z
char x = 'x';//變數x 的值為'x'
不帶初始化的定義:帶有靜態儲存持續時間的變數會被隱式初始化為null(所有位元組的值都是0),其他所有變數的初始值是未定義的。
7.2
、c 中的變數宣告
變數宣告向編譯器保證變數以指定的型別和名稱存在,這樣編譯器在不需要知道變數完整細節的情況下也能繼續進一步的編譯。變數宣告只在編譯時有它的意義,在程式連線時編譯器需要實際的變數宣告。
變數的宣告有兩種情況:
1、一種是需要建立儲存空間的。例如:int a 在宣告的時候就已經建立了儲存空間。
2、另一種是不需要建立儲存空間的,通過使用extern關鍵字宣告變數名而不定義它。 例如:extern int a 其中變數a 可以在別的檔案中定義的。
3、除非有extern關鍵字,否則都是變數的定義。
extern int i; //宣告,不是定義
int i; //eg宣告,也是定義
:其中,變數在頭部就已經被宣告,但是定義與初始化在主函式內:
#include //
變數宣告
extern int a, b;
extern int c;
extern float f;
int main ()
當上面的**被編譯和執行時,它會產生下列結果:
value of c : 30
value of f : 23.333334
c中有兩種型別的表示式:
1、左值(lvalue):指向記憶體位置的表示式被稱為左值(lvalue)表示式。左值可以出現在賦值號的左邊或右邊。
2、右值(rvalue):術語右值(rvalue)指的是儲存在記憶體中某些位址的數值。右值是不能對其進行賦值的表示式,也就是說,右值可以出現在賦值號的右邊,但不能出現在賦值號的左邊。
變數是左值,因此可以出現在賦值號的左邊。數值型的字面值是右值,因此不能被賦值,不能出現在賦值號的左邊。
下面是乙個有效的語句:
int g = 20;
但是下面這個就不是乙個有效的語句,會生成編譯時錯誤:
10 = 20;
7.4
、摘抄:
7.4.1
、變數宣告與定義
extern
inta
;//
宣告乙個全域性變數a
inta
;//
定義乙個全域性變數a
extern
inta =0
;//
定義乙個全域性變數a 並給初值。一旦給予賦值,一定是定義,定義才會分配儲存空間
inta =0
;//定義乙個全域性變數a,並給初值
宣告之後你不能直接使用這個變數,需要定義之後才能使用。
第四個等於第三個,都是定義乙個可以被外部使用的全域性變數,並給初值。
他們看上去可真像。但是定義只能出現在一處。也就是說,不管是int a 還是int a=0 都只能出現一次,而那個extern int a 可以出現很多次。
當你要引用乙個全域性變數的時候,你就要宣告extern int a 這時候extern 不能省略,因為省略了,就變成int a 這是乙個定義,不是宣告。
7.4.2
、變數的記憶體定址(與系統有關)
(1)記憶體定址由大到小,優先分配記憶體位址比較大的位元組給變數,所以說變數越先定義,記憶體位址就越大。
如下面**,先定義變數a,再定義變數b,列印出a 的位址是0x7fff5fbff828,b 的值是0x7fff5fbff824。a 的位址比b 的位址大4 位元組。
(2)(3)
#include
intmain()
(4)乙個變數一定要先初始化才可以使用,因為c 語言中預設乙個沒有初始化的變數值是乙個不可知的很大值。如下面所示,a 沒有初始化,列印出a 的值是1606422582。
#include
intmain()
C語言第七課
主要內容 結構體 很重要,掌握 一 結構體的宣告 結構體是一種比較靈活的資料型別,與oc要學的類很相似 結構體是一種自己定義的資料型別示例 struct 結構體名 student 定義乙個學生型別 由結構體型別修飾的變數,叫結構體變數 定義 struct 結構體名 變數名 示例 struct stu...
python第七課(集合)
set 集合是乙個無序不重複元素的集合 無序唯一 支援 union 聯合 intersection 交 difference 差 和 sysmmetric difference 對稱差集 等數 算 建立語法 set1 set 空 set1 set1 set 字典將取key key 唯一 set1 s...
第七課 指標 二
與 操作符 char ch a char cp ch 操作符為取位址操作符,表示式 ch是乙個右值,所以 ch不能作為可被修改的左值 為間接引用操作符,表示式 cp實際上是乙個變數,屬於左值 表示式 cp 1則相當於將指標cp指向的位址下的內容取出並加1再返回,該表示式為右值 表示式 cp 1 是乙...