一、什么是C語言
什么是C語言,C語言是一門計算機語言,那什么是計算機語言?
就如世界有好多個國家,每個國家的語言可能都不一樣,有漢語、英語、俄羅斯語、法語等等,那么按照正常來說,比如中國人,就會用漢語交流,美國人就用英語交流等等,如果要是想中國人和美國人交流,要么中國人說英語,要么美國人說漢語,這樣對方才能懂說的話是什么意思
這個比喻就好比計算機語言,計算機語言就是:人和計算機交流,那么我們就需要學習計算機語言,為什么?因為計算機只認識0和1,這個要是在深究的話,請自行百度
那么我們現在有什么計算機語言,比如:C、C++、Java、Python、JavaScript、Go等等,這些都是計算機語言
接下來我們說一下計算機語言的發展史:
早期計算機能識別的語言叫做二進制語言,這個怎么理解呢,就是計算機是一個硬體,但是它要通電,而電分正電和負電,所以也就是我們上面說到的0和1,0為負電,1為正電,它們也被稱為電信號
那么我們現在就想讓計算機作業,寫一段代碼,那可能二進制語言表示就是這樣的
01010101010010010101011100010001
給計算機輸入這樣很多的電信號,它是不是特別復雜啊,所以當時寫這樣代碼就要查手冊才能寫出正確的代碼
所以到后來出現了助記符,比如這段代碼
010101010
假如這段代碼就是表示ADD,就是加法助記符,那我們以后寫代碼就直接寫ADD就好了,也簡單了,而這些助記符所表達的語言就是 匯編語言
發現還是非常繁瑣,接著就有了B語言,而在B語言的基礎上發明了我們所熟知的C、C++等等,從C語言開始我們就稱這些語言為高級語言
C語言是一門面向程序的計算機編程語言,與C++,Java等面向物件的編程語言有所不同,
決議C語言程式的代碼:
// 這個是我們C語言的一個主函式框架,也就是說代碼是從這里開始進行執行的
int main()
{
return 0;
}
那我們先來列印一個代碼吧
人生的中的第一個C語言Hello World
int main()
{
printf("Hello World\n");
return 0;
}
直接按 F10 debug代碼,看一下執行流程

可以看到在第8行有一個小箭頭,再按F10,可以看到箭頭到了第9行,所以說代碼是從main函式開始執行的

我們再創建一個main函式看會怎么樣

所以說main函式有且僅有一個
那么這個函式體內還有return 0,這個的意思就是回傳0,0是整數,而main() 函式之前的int 就是整型的意思
main()函式之前放int表示 main() 函式呼叫回傳一個整型值
這樣return 0,就和int前后呼應的聯系起來
但我們是不是在之前看到的C語言的main函式寫法是這樣的:
void main()
{
}
沒錯,這個也是我們C語言的寫法,但是這種寫法已經是過時的寫法了,所以我們在寫的時候,就不要再這樣寫了
接著看我們列印函式printf() 這個函式其實是可以拆解的它是分為print和function,顧名思義,就是列印函式
那么這個列印函式又叫庫函式,庫函式就是C語言本身封裝好提供給我們的函式,那么這個就相當于在使用別人的函式
使用別人給我提供的函式就要去 “打招呼” 也就是要去呼叫一下:
//include叫做包含
#include <stdio.h>
那么這個代碼的意思就是包含stdio.h的檔案
我們再來拆分stdio.h
- std:標準
- i:input 輸入
- o:outut 輸出
所以頭檔案的意思就是標準輸入輸出頭檔案
那么我們以后要是寫輸入或者輸入的函式的時候都要引入這個頭檔案
所以接下來寫一個列印代碼的完整代碼:
#include <stdio.h>
int manin()
{
printf("你好,世界!\n");
printf("我是程式員,是用代碼編織世界的工程師\n");
return 0;
}
二、字符型別
| char | 字符格式資料 |
|---|---|
| short | 短整型 |
| int | 整型 |
| long | 長整型 |
| long long | 更長的整型 |
| float | 單精度浮點數 |
| double | 高精度浮點數 |
我挑幾個舉例這些都怎么使用:
- char
#include <stdio.h>
int manin()
{
char ch = 'C';
printf("%c\n", ch);
return 0;
}
字符 ‘C’ 可以理解為在記憶體開辟了一塊空間,而 ch 就是對這塊空間的命名
那么列印就是 %c 可以理解為一個占位符,即要列印字符格式的資料,也就是列印ch所對應的字符
- int
#include <stdio.h>
int manin()
{
int age = 21;
printf("%d\n", age);
return 0;
}
同樣開辟記憶體空間命名為age,而列印的占位符是 %d ,這個是代表整型十進制資料
- float、double
#include <stdio.h>
int manin()
{
float f = 5.0;
printf("%f\n", f);
return 0;
}

#include<stdio.h>
int manin()
{
double d = 3.1415926;
printf("%lf\n", d);
return 0;
}

這兩個對比就可以看出都是輸出小數點6位數,double而且還四舍五入了,這也是說明double更加精確
那為什么有這么多的字符型別?對應不用的數值型別?減少記憶體消耗?
接下來我們圍繞著各個字符型別的大小展開理解
那我們接著寫代碼:
//sizeof() 查看大小
#include<stdio.h>
int main()
{
printf("%d\n", sizeof(char)); // 1
printf("%d\n", sizeof(short)); // 2
printf("%d\n", sizeof(int)); // 4
printf("%d\n", sizeof(long)); // 4/8
printf("%d\n", sizeof(long long)); // 8
printf("%d\n", sizeof(float)); // 4
printf("%d\n", sizeof(double)); // 8
return 0;
}
像他這個輸出的結果的數字單位是位元組,何為位元組?我這里只列舉幾個
bit
byte
KB
MB
GB
TB
...
計算機最小的記憶體單位為bit,1byte = 8bit,1KB = 1024開始后面的進制單位都是1024
我們還是看輸入的各個字符型別大小的單位都是位元組,那這和資料型別很多有什么關系?
因為是在記憶體開辟空間,就會涉及到開辟大小的問題,那我們看int和short型別,一個是占4個位元組,一個是占2個位元組
試想一下,我們用int定義了一個人的年齡為21歲,那有沒有人是20000萬歲呢,肯定是沒有的,所以我們在定義年齡的時候,使用short int短整型更較為合適,這樣也是較為合理,最重要的是,節省了記憶體空間
int型別定義的話,會占用4個位元組,也就是32個bit位,這樣如果定義年齡的話,會顯得比較浪費空間,而short定義的話,是節省了int型別的一半空間,long和long long就是更適合更長的整型了
所以每個字符型別是有著更較為合適的型別,減少了記憶體不必要的消耗
我們還看到了long長整型的長度是4或者8,這是因為跟作業系統和編譯器有關,long int長度至少32位,而64位類Unix系統為64位
三、變數
我們生活中有些值是不變的,如:身份證號,血型、圓周率等,那么這些值我們就稱為常量
而體重,年齡,薪資等是會變得,這樣我們稱為變數
1、區域變數
#include<stdio.h>
int manin()
{
int a = 10; // 區域變數
return 0;
}
2、全域變數
定義在代碼塊外面的變數
#include <stdio.h>
int b = 20; // 全域變數
int manin()
{
return 0;
}
如果區域變數和全域變數同時存在,會優先輸出區域變數,比如下面的代碼
#include<stdio.h>
int a = 10;
int manin()
{
int a = 100;
printf("%d\n", a);
return 0;
}

同樣的變數名字,會優先輸出區域變數的值
那說到這里就不得不提作用域和生命周期了
1.作用域
- 區域變數
作用域(scope),程式設計概念,通常來說,通常來說一段代碼中所用到的名字并不總是有效或者說是可用的
而限定這個名字的可用性的代碼范圍就是這個名字的作用域
簡單來說就是,這個變數哪里可以用,哪里就是它的作用域
#include<stdio.h>
int manin()
{
int a = 100;
printf("%d\n", a)
return 0;
}
我們看這個上面的代碼,這樣列印的話是可以直接用的,如果是這樣的:
#include<stdio.h>
int a = 10;
int main()
{
{
int a = 100;
}
printf("%d\n", a);
return 0;
}

那么這樣的話就是不可用了,這個變數在最里面的括號中,也就是這個變數的作用域
- 全域變數
我們在本工程里面的源代碼中再新創建一個源檔案,看一下全域變數的作用域
int c_a = 21;
然后在另一個源檔案就可以這樣使用
#include<stdio.h>
int main()
{
// extern 宣告外部符號,就是我們在另一個源檔案中創建的變數,這樣才可使用
extern int c_a;
printf("%d\n", c_a);
return 0;
}

所以說全域變數是的作用域是整個工程
2.生命周期
變數的生命周期是指變數的創建到變數的銷毀之間的的一個時間段
-
區域變數
區域變數的生命周期是:進入作用域生命周期開始,出作用域生命周期結束 -
全域變數
全域變數的生命周期是:整個程式的生命周期
那這個宣告周期我們是很難用代碼解釋的,所以這個就是只能是通過字面意思去理解
四、常量
C語言的常量和變數的定義的形式有所差異
C語言中的常量分為以下幾種:
- 字面常量
- const修飾的常變數
- #define定義的識別符號常量
- 列舉常量
我們分別來看:
//字面常量
#include<stdio.h>
int main()
{
3;
5;
100;
return 0;
}
//const
#include<stdio.h>
int main()
{
const int a = 8;
printf("a=%d\n", a);
a = 10;
printf("a=%d\n", a);
return 0;
}

在定義的變數前面加一個const,后面再想修改變數的話就不可以了,如果去掉const,那么修改變數是可以的
雖然被const修飾的變數是不可以被被改變的,但是變數本質還是變數,只是不能被修改,所以叫做const修飾的常變數
#define定義常量也是比較方便的
// #define
#include<stdio.h>
#define MIN 22
int main()
{
int arr[MIN] = {0};
printf("%d\n", MIN)
return 0;
}
列舉就是可以被一一列舉出來的值
//列舉常量
enum Color
{
RED,
YELLOW,
BLUE
};
int main()
{
enum Color c = BLUE; //使用列舉常量中的BLUE賦值給變數c
return 0;
}
列舉常量就是RED,YELLOW,BLUE 這個三個,這三個也是有值的,并且也是不可被改變的
int main()
{
printf("%d\n", RED);
printf("%d\n", YELLOW);
printf("%d\n", BLUE);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/291541.html
標籤:其他
上一篇:C語言運算子的那些事(詳細全)
下一篇:buildroot 重新編譯內核
