變量和常量
- 1. 前言
- 2. 預備知識
- 2.1 printf和%d
- 2.2 \n
- 2.3 scanf
- 2.4 scanf在vs中報錯
- 2.5 extern
- 2.6 數組的初始化
- 3. 變量和常量的區別
- 4. 變量
- 4.1 定義變量的方法
- 4.2 變量的分類
- 4.2.1 局部優先
- 4.3 變量的使用
- 4.4 變量的作用域
- 4.4.1 局部變量的作用域
- 4.4.2 全局變量的作用域
- 4.5 變量的生命周期
- 4.5.1 局部變量的生命周期
- 4.5.2 全局變量的生命周期
- 5. 常量
- 5.1 字面常量
- 5.2 const修飾的常變量
- 5.3 #define定義的標識符常量
- 5.4 枚舉常量
1. 前言
大家好,我是努力學習游泳的魚。本文會帶你進入變量和常量的大門,帶你進一步了解C語言的奧秘。
2. 預備知識
2.1 printf和%d
#include <stdio.h>int main()
{int a = 100;printf("a = %d\n", a);return 0;
}
這段代碼會輸出a = 100
因為a = %d
中,%d
表示打印整數,會被直接替換成a
的值,即100
。
2.2 \n
\n
是一個轉義字符,表示換行。
2.3 scanf
scanf
是C語言的庫函數,對應的頭文件是stdio.h
和printf
相反,scanf
用來完成從鍵盤中輸入數據的操作,
使用時注意在變量名前面加上&
,這點初學者容易忘記。
#include <stdio.h>int main()
{int a = 0;scanf("%d", &a); // 注意不能漏掉&return 0;
}
2.4 scanf在vs中報錯
如果你使用的是visual studio
系列的編譯器,需要在程序的第一行加上一行代碼才能使用scanf
。
#define _CRT_SECURE_NO_WARNINGS 1
如果你不嫌麻煩可以每次都加上這行代碼。
如果你不想每次都寫這行代碼,可以在vs的安裝路徑找到newc++file.cpp
文件,在里面加上這行代碼即可。當然你也可以研究一下scanf
的替代函數scanf_s
,不過我不建議這么做。
第一步:找到newc++file.cpp
可以使用everything
進行查找點這里下載
但是你直接打開的話是修改不了的,因為權限不夠。這有兩種解決方法。
解決方法一:把文件拖到桌面,修改后再放回去。
解決方法二:復制文件路徑,管理員權限打開記事本,再打開文件路徑就行了
2.5 extern
extern
是用來聲明外部符號的。任何變量或函數使用前都要先聲明或者定義,如果這個函數或者變量在其他文件內,則可以使用extern
聲明。
2.6 數組的初始化
這里只需要明白,下面代碼方括號里的10必須是個常量(不變的量)就行了。
int arr[10] = {0};
3. 變量和常量的區別
會改變的量,叫做變量。
不會改變的量,叫做常量。
4. 變量
4.1 定義變量的方法
類型+名字(+初始化)
int age = 10;
char ch = 'w';
4.2 變量的分類
變量分為全局變量和局部變量。
定義在大括號外部的變量叫做全局變量。
定義在大括號內部的變量叫做局部變量。
int b = 1000; // 全局變量 - 定義在大括號外面int main()
{int a = 100; // 局部變量 - 定義在大括號里面return 0;
}
4.2.1 局部優先
當全局變量和局部變量的名字沖突時,局部優先!
#include <stdio.h>int a = 1000; // 全局變量int main()
{int a = 100; // 局部變量printf("a = %d\n", a);return 0;
}
這里局部變量的a
和全局變量的a
名字沖突了,但是輸出結果是a = 100
。
不建議把全局變量和局部變量的名字取成一樣的!
4.3 變量的使用
寫一個代碼,完成兩個整數的相加
#include <stdio.h>int main()
{int num1 = 0;int num2 = 0;int sum = 0;// 輸入scanf("%d %d", &num1, &num2);// 求和sum = num1 + num2;// 輸出printf("sum = %d\n", sum);return 0;
}
4.4 變量的作用域
一個變量哪里可以使用,哪里就是它的作用域。
4.4.1 局部變量的作用域
局部變量的作用域是變量所在的局部范圍。
#include <stdio.h>int main()
{{int a = 100; // 局部變量printf("%d\n", a); // 這里可以使用}printf("%d\n", a); // 這里不能使用return 0;
}
4.4.2 全局變量的作用域
全局變量的作用域是整個工程。
#include <stdio.h>int a = 100; // 全局變量void test()
{printf("test::%d\n", a); // 這里可以使用
}int main()
{test();printf("main::%d\n", a); // 這里可以使用return 0;
}
全局變量甚至可以跨文件使用,但在使用前要使用extern
聲明。
test1.c
int a = 100; // 跨文件的全局變量
test2.c
#include <stdio.h>extern int a; // extern是用來聲明外部符號的void test()
{printf("test::%d\n", a); // 可以使用
}int main()
{test();printf("main::%d\n", a); // 可以使用return 0;
}
4.5 變量的生命周期
一個變量從創建到銷毀的時間段就是它的生命周期。
4.5.1 局部變量的生命周期
進作用域生命周期開始,出作用域生命周期結束。
4.5.2 全局變量的生命周期
全局變量的生命周期和程序的生命周期相同。即:與程序共存亡!
5. 常量
5.1 字面常量
直接寫出來的常量就叫做字面常量。
20;
3.14;
'a'; // 字符常量
"abcdef"; // 字符串常量
字面常量可以給變量賦值或初始化。
int a = 10;
char ch = 'w';
5.2 const修飾的常變量
const
是C語言的關鍵字,意思是常屬性。
被const
修飾的變量,具有常屬性,在語法上不能改變,但本質上還是個變量。
所以,我們稱這種變量為常變量。
int main()
{const int a = 10;a = 20; // 不能像這樣改變a的值了return 0;
}
下面證明const
修飾的常變量本質是個變量。
數組初始化時方括號里必須是常量。
int arr[10] = {0};
那么const
修飾的常變量能不能用來初始化數組時指定大小呢?
int main()
{const int n = 10;int arr[n] = {0}; // 這里會報錯return 0;
}
答案是:不能!
由此可知,
在C語言里,
const
修飾的常變量只是具有常屬性,但本質上是個變量,不能當做常量來處理。
5.3 #define定義的標識符常量
#include <stdio.h>#define M 100 // 這里M就是一個常量int main()
{int a = M; // M可以給變量賦值int arr[M] = {0}; // M可以在數組初始化時指定大小printf("a = %d\n", a);return 0;
}
5.4 枚舉常量
C語言提供了一個關鍵字:
enum
,就是枚舉的意思。
枚舉,即一一列舉。
生活中有些東西是可以一一列舉的。比如:
性別:男,女,保密。
三原色:紅色,綠色,藍色。
星期:星期一,星期二,……,星期日。
C語言提供了枚舉類型。
enum Sex // enum Sex就是一個枚舉類型
{// 這里的MALE,FEMALE,SECRET就是枚舉常量MALE,FEMALE,SECRET
}; // 分號不能省略int main()
{enum Sex s = MALE; // 可以用枚舉常量給枚舉類型初始化或賦值return 0;
}
枚舉常量也是有值的,默認從
0
開始。
#include <stdio.h>enum Color
{RED, // 0GREEN, // 1BLUE // 2
};int main()
{printf("%d %d %d", RED, GREEN, BLUE); // 輸出0 1 2return 0;
}