寫在前面
本系列博客旨在記入博主學習C語言的的筆記和自己的一些理解,
希望通過博主的一些分享能夠幫助學習c語言小白快速入門,和博主一起學習,快速進步,一起交流,互相督促,共同學習!(本系列持續更新)

C語言快速入門
- 寫在前面
- 本章目標
- 什么是C語言
- 語言的發展
- 機器語言
- 匯編語言
- C語言歷史
- C語言的優勢
- 第一個C語言程式
- C語言環境的配置
- APP推薦建議
- 安裝教程推薦
- 第一個C程式
- ==注意事項==
- 資料型別
- 整型
- 浮點型
- 常量和變數
- 常量
- 字面常量
- const修飾的常變數
- #define定義的常量
- 列舉常量
- 變數
- 定義變數的方法
- 變數的分類
- 變數的作用域及生命周期
- 字串("\0")
- 字串的結束標志'\0';
- 轉義字符
- C注釋
- 選擇(分支)陳述句
- 回圈陳述句
- 函式
- 函式了解
- 陣列
- 運算子
- 算數運算子
- 邏輯運算子
- 移位運算子
- 位運算子
- 賦值運算子
- 單目運算子
- 關系運算子
- 邏輯運算子
- 條件運算子
- 逗號運算子
本章目標
基本了解C語言的基礎知識,對C語言有一個大概的認識,每個知識點就是簡單認識,快速入門C語言,后期博主還會對每個知識點深入學習,

什么是C語言
C語言是一門通用計算機編程語言,廣泛應用于底層開發,C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存盤器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言,
像英語,漢語一樣,屬于交流的語言,不過是人和計算機交流的語言,
C語言是一門面向程序的計算機編程語言,與C++,Java等面向物件的編程語言有所不同,
語言的發展

機器語言
第一代計算機語言稱為機器語言,機器語言就是 0/1 代碼,計算機只能識別 0 和 1,在計算機內部,無論是一部電影還是一首歌曲或是一張圖片,最終保存的都是 0/1 代碼,因為 CPU 只能執行 0/1 代碼,
匯編語言
首先這么像機器語言撰寫肯定是可以的,但是這樣太麻煩,而且很不好理解,所以后來就出現了匯編語言,
匯編語言就是將一串很枯燥無味的機器語言轉化成一個英文單詞,比如說:add 1, 2;
add 就是一個英文單詞,這樣看起來就稍微有一些含義了,即 1 和 2 相加,這個就是匯編語言,
C語言歷史
C語言是由B語言發展而來,而后大多公司都使用C語言,不同的公司對C語言有自己的發展,和改進,而后出現不同的標準,
為了統一標準 美國國家標準協會(ANSI)先后C89 C99 C12等標準,目前比較權威的為c99,
而后在C語言的基礎演變了C++,java 等面向物件的語言,
C語言的優勢
廣泛應用于底層開發,C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存盤器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言,C語言偏向于底層開發,如作業系統,
1、廣泛用于底層開發
2,可移植性強,跨平臺性
3,其編譯器(將C語言轉換成計算機語言)主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等,
如VS(IDE集成開發環境)用的就是MSVC編譯器,
第一個C語言程式
看了C語言的歷史你肯定迫不及待想自己寫一個C語言程式吧,
C語言環境的配置
APP推薦建議
VS2019下載地址
下載vs2013及以上版本環境
安裝教程推薦
B站位元鵬哥教程如下
VS2019安裝教程

第一個C程式
相信看了安裝教程,你已經安裝好了VS2019并且成功的創建第一個C語言專案吧,
那我們來寫第一個C語言程式吧!
在螢屏中輸出Hello world!
是不是很神奇,短短6行代碼便實作了我們想要實作的功能,
其實編程語言的出現,代碼就是描述我們生活中的實際問題的!
注意事項
1, 一個專案中有且僅有一個主(main)函式
2,{ 是程式的入口 表示程式開始,} 便是程式的出口表示程式結束
3,因為printf是在stdio.h庫中的,就好比生活中你使用別人的東西 ,使用了printf函式前需要向stdio.h打招呼所以 main 函式上面要包含庫函式<stdio.h>
4 ,main前有一個int 說明該函式的回傳值是整型(這些我們待會會學到,先記住)與最后一行代碼return 0相呼應;
記住上面便能實作自己第一個C語言程式了快去試試吧!
資料型別
//整型
//即數學中的整數
short
int
long
long long
//浮點型
//數學中的小數(小數點可浮動)
float
double
整型 可以表示生活中的 年齡 ,人數等整數資料
而浮點型 可以表示 生活中的體重,身高等帶有小數的資料
想必你會疑問 :為什么會出現怎么多資料型別呢?
首先我們先來測驗一下它們這些型別的記憶體大小
我們先來認識一個C語言運算子吧
sizeof()用來計算型別或者型別所創建變數所占記憶體空間大小(Byte)
計算機記憶體大小的單位
一個二進制位的0或1一位定義為1bit
| 單位 | 換算 |
|---|---|
| bit (b/位元) | 0/1(一個二進制位大小) |
| Byte (B/位元組) | 8bit |
| KB | 2^10B |
| MB(兆位元組) | 2^20B |
| GB | 2^30B |
| … | … |
注:C語言規定sizeof(long)>=sizeof(int) 即可
所以long型別在不同平臺的大小不同,4/8
整型
根據生活中資料范圍不同選擇不一樣的資料型別,合理的利用記憶體空間
比如 一個人的年齡 最多不超過500 所以用short短整型即可
浮點型
表示精度的不同,即小數點后面 位數長度不同
根據你的資料精度不同,合理選擇浮點型別
常量和變數
顧名思義 常量就是不變的量,變數可以改變的量
常量
不可改變的量
如人的性別,身份證號碼等等…
字面常量
66;
3.14
999
//*這些都是字面常量*
const修飾的常變數
const 修飾變數使改變數具有常屬性(不可修改)
const int height=175;//創建了一個int型別的變數 const修飾后
// height不可改變
height=200; //err
但是該量還是變數只不過有了常量的不可修改屬性
代碼中的兩個錯誤
錯誤1,const 修飾的常量不可修改
錯誤2,const 本質還是變數不可定義陣列長度
#define定義的常量

使用方法
#define MAX 100
#define +空格+常量名+空格+字面常量
注:常量名習慣大寫
列舉常量
生活中有一些值可以一一列舉
比如 :性別,三元色等等;
enum sexa //列舉型別
{
male, //列舉常量
female
};
enum sexa 就是列舉型別和int一樣屬于一種資料型別
該型別只有兩種列舉常量可以選擇 male和female
使用時賦值其他未定義的列舉常量會報錯

每個列舉常量有自己的值 規定第一個值為0然后從上到下依次加一;
設定列舉常量可以賦初始值
變數
可以改變的量
定義變數的方法
型別 +變數名+常量;
int age=10;
age=13;//可以修改
float pai=3.14;
char ch='w';
變數的分類
區域變數
定義在{}內的變數為區域變數
全域變數
定義在main函式外且不在{}內的變數
eg:
int glab=4;//全域變數
int add(int x, int y)
{
int sum=0;
// 區域變數
}
int main()
{
int a=6;
// 區域變數
}
是否想過當區域變數和全域變數同名時會怎樣?
看到上面的結果想必你有了答案!
總結
上面的區域變數a變數的定義其實沒有什么問題的!
當區域變數和全域變變數同時存在時采用區域優先原則
變數的作用域及生命周期
作用域(scope),程式設計概念,通常來說,一段程式代碼中所用到的名字并不總是有效/可用的而限定這個名字的可用性的代碼范圍就是這個名字的作用域,
簡單的說作用域就是該變數存在的范圍 出了該范圍該變數就失效
區域變數的作用域在它的區域范圍即在{ }
全域變數的作用域在整個工程
int main()
{
int b=1;
{
int a=12;
// a的作用域
}
// b的作用域
}

可以看到全域變數的作用域是整個工程!
生命周期
變數的生命周期指的是變數的創建到變數的銷毀之間的一個時間段
- 區域變數的生命周期是:進入作用域生命周期開始,出作用域生命周期結束,
- 全域變數的生命周期是:整個程式的生命周期,
字串("\0")
" Hello world"
這種由雙引號(Double Quote)引起來的一串字符稱為字串字面值(String Literal),或者簡稱字串,
顧名思義字串就是一串字符
C語言沒有這種型別,所以通常存放在陣列中
//字符
char ch='w';
//字串
char arr1[]={ 'H','e','l','l','o'};
char arr2[]="hello";
字串的結束標志’\0’;
注:字串的結束標志是一個\0的轉義字符,
在計算字串長度的時候\0是結束標志,不算作字串內容,
可以直觀看到字串arr2內有6個字符,而字符陣列只有5個字符
列印arr1和arr2時因為列印函式遇到‘\0’才會停止列印
所以arr1在后面找了很久才遇到’\0’所以Hello后面都是隨機值
那‘\0’算字串長度嗎?

strlen計算字串長度函式遇到’\0’計算結束
arr1找了31個字符才找到結束標志‘\0’
所以‘\0’并不算字串長度
總結
字串的結束標志是一個\0的轉義字符,
在計算字串長度的時候\0是結束標志,不算作字串內容,
轉義字符
當你要列印你的檔案路徑時

就很迷,為什么這樣呢?
這是就要提到轉義字符這個概念了
難道轉義字符是轉變了該字符的本來意思?
下面看一些轉義字符
轉義字符的使用
看了轉義字符成功列印了正確的路徑
自己可以去試試
C注釋
1.代碼中有不需要的代碼可以直接洗掉,也可以注釋掉
2. 代碼中有些代碼比較難懂,可以加一下注釋文字

注釋有兩種風格:C語言風格的注釋/xxxxxx/
缺陷:不能嵌套注釋
C++風格的注釋//xxxxxxxx可以注釋一行也可以
VS默認c++風格
注釋快捷鍵


選擇(分支)陳述句
我們先來認識一下最簡單的選擇陳述句
eg:如果好好寫博客,你就能獲得粉絲,不寫博客就沒得粉絲!
if else 陳述句 如果 否者

怎么用帶嗎實作呢?
上代碼
int main()
{
int blog=0;
scanf("你會好好寫100篇博客>1\0");
if(blog==100)
{
printf("識訓粉絲\n");
}
else
{
printf("沒有粉絲\n");
}
return 0;
}
回圈陳述句
有些事必須一直做,比如我要日復一日的寫博客,比如大家,日復一日的學習,
for 回圈
while回圈
do while 回圈
我們在拿上面的代碼舉例
用while回圈實作
int main()
{
int blog=0;
printf("你會好好寫100篇博客>1\0");
while(blog<100)//當blog<100進入回圈
{
blog++; //blog數加一
printf("再寫一遍博客\n");
}
//回圈結束來到這
printf("很多粉絲\n");
return 0;
}
函式
函式是一個自我包含的完成一定相關功能的執行代碼段,我們可以把函式看成一個“黑盒子”,你只要將資料送進去就能得到結果,而函式內部究竟是如何作業的,外部程式是不知道的,
函式了解
還記得我們一開始寫的這個程式嗎?
讓我們先從main函式開始吧
int main()
{
return 0;
}
函式名:main是函式名,函式名一般自己書寫,就像創建變數一樣
引數:()里面可以輸入引數,引數由型別名和變數名組成, 因為main函式的引數為空(void)可以省略
回傳值:回傳值即是這個函式可以回傳某些量 比如 int 說明這個函式最后會回傳一個int的量,retun 0 說明該函式的回傳值為0;某些函式不需要回傳值 寫成void
函式體:{ }里面的內容便是函式體,由很多陳述句構成
我們已經認識到了上面這個便是主函式,那我們自己嘗試寫一個函式
int Add(int x,int y) //實作加法功能的函式
{ //函式體
return x+y;//回傳x+y的和
}
int main()
{
int a=0,b=0,sum=0;
sum=Add(a,b); //呼叫該函式
}
學到這里,想必你已經對函式有了一定的了解
那就夠了,哈哈哈其實博主現在也就只會這點點
陣列
陣列(Array)是有序的元素序列, [1] 若將有限個型別相同的變數的集合命名,那么這個名稱為陣列名,組成陣列的各個變數稱為陣列的分量,也稱為陣列的元素,有時也稱為下標變數,用于區分陣列的各個元素的數字編號稱為下標,陣列是在程式設計中,為了處理方便, 把具有相同型別的若干元素按有序的形式組織起來的一種形式, [1] 這些有序排列的同類資料元素的集合稱為陣列,
陣列是用于儲存多個相同型別資料的集合,
int arr[5]={1,3,4,5};//int指陣列型別是int
// arr是陣列名
// [5]是陣列長度
char ch[]={'a','b','c'};//初始化時陣列型別也可省略
你是否注意點arr陣列并不是從1開始而是從0開始
一開始初始化的arr[10]只是定義陣列長度為10
而后面對陣列的存放則是從0開始到9 ,10個數,
切記不可越界 對arr[ 10]進行操作是錯誤的,
運算子
指令系統的每一條指令都有一個運算子,它表示該指令應進行什么性質的操作,
可能你還是不太懂,沒事看我介紹完,你就明白了,
比如數學中的加減乘除就是運算子!
算數運算子
簡單地說,進行數學的算數運算就是算數運算子
| 符號 | 作用 |
|---|---|
| + | 進行加法運算 |
| - | 進行減法運算 |
| * | 乘法運算 |
| / | 除法運算 |
| % | 取余/取模運算 |
邏輯運算子
移位運算子
位運算子
賦值運算子
單目運算子
關系運算子
邏輯運算子
條件運算子
逗號運算子
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/286503.html
標籤:其他
