
前言:
Hello,大家好!俗話說,知己知彼,百戰不殆,我們學習C語言也是一樣,得先從全域的層面去了解它,知道它包含哪些東西,然后才是去深入的學習,本篇為初學C語言的朋友全面梳理和介紹C語言,不至于正式學的時候云里霧里,
目錄
- ==資料型別==
- ==常量、變數==
- ==陣列==
- ==字串、轉義字符==
- ==選擇陳述句==
- ==回圈陳述句==
- ==函式==
- ==運算子==
- ==結構體==
- ==指標==
資料型別
現實生活中,我們對資訊的分類方式多種多樣,目的都是為了更好的處理它們,而對于計算機而言,所有的資訊最后都要轉化為0和1來處理,只有對資訊進行分類我們才能用最優的資源得到更好的結果,
介紹資料型別前,我們先了解計算機的存盤單位,
C語言中資料型別分為:int 、short int 、long int 、long long int、float、 double 、char
- 整形int:一個int型別在記憶體占的空間是4個byte,即32個bit位,表示的值為整數,范圍是–2^31 ~ 2^32–1,
- 短整型short int、長整型long int、long long int:它們表示的也是整數,不過short int占2個byte、long int占4個byte、long long int占8個byte,由于所占空間不同,它們能表示的值的范圍也就不同,比如:short int最大能表示的值即16個bit全是1,為65535,
- 單精度浮點型float:一個float型別占4個byte,表示的值為小數,精度最高可到小數點6位,
- 雙精度浮點型double:該型別占8個byte,與float一樣用來表示小數,但能表示的值范圍更大、精度更高,
- 字符型別char:所占記憶體為1個byte,用來存放字符,實質上存放的是整數,計算機是根據ascll表把字符轉化為數字存的,
常量、變數
生活中有的值是不變的,例如π值;而有的值是會變的,例如體重,所以,C語言中就有了常量和變數,
- 變數:
區域變數
#include <stdio.h>
int main()//程式的入口,只能有一個,
{
int a=0;
/*在記憶體中分配4個byte(1個int類
型)用來存放整型,這塊記憶體名為a,
暫時賦為0.*/
a=520;//a這塊記憶體的值就變為了520
{
int b;//同理
}
b=1;
/*此時錯誤,因為變數b的作用
范圍只在它最近配對的{}
而a的作用范圍在main函式的{}內*/
return 0;
}
全域變數
#include <stdio.h>
int a=0;
//此時a為全域變數,可作用與整個工程
int main()
{
int a=520;//這個a為區域變數
pritnf("%d\n",a);
/*在螢屏上列印a的值,猜猜為多少呢?
答案是:520.why?
全域變數a和區域變數a是兩個不同的
記憶體空間,但是都叫a遇到這種情況,
那么我們遵循區域優先原則!*/
return 0;
}
- 常量:
常量,即不可改變的量,主要有四種:字面常量、const修飾的常變數、#define定義識別符號常量、列舉常量(暫時不講),
#include <stdio.h>
#define π 3.1415
/*定義一個常量名字叫π,值為3.1415
int main()
{
3.14;
/*這就是一個字面常量,但執行這條
陳述句并沒有意義,*/
float a=3.14;//變數a的值存字面常量3.14
a=π;//此時把常量π的值賦值給a
const int b=1;
b=2;//此時發生錯誤
/*const修飾變數b后,使得變數b
的內容不能被修改*/
return 0;
}
陣列
區域變數相當于存放一個東西,那么若我們有多個同型別的東西要存放,豈不得都定義呀!所以有了陣列,陣列即一組相同型別的資料,
#include <stdio.h>
int main()
{
int arr[10]={0};
/*定義一個arr,能夠存放10個int
型別的變數,所以它占10×8個byte*/
arr[0]=1;//把第一個變數賦值為1
/*陣列元素的下標從0開始
定義時[]中表示幾個,訪問時[]中
表示第幾個*/
arr[1]=2;
...
return 0;
}

字串、轉義字符
- 字串
我們用char型別(占1×8個bit位)來存放字符,例如字符’a’的ascll碼值是為97,二進制:0110 0001,那么當我們想存盤很多字符資訊時怎么辦呢?用字串!字符用’ '引,而字串用" "引,
#include <stdio.h>
int main()
{
char arr[5]="abcd" ;
/*定義char型別的陣列,分配記憶體
為1×8×5個bit,存放字符*/
pintf("%d\n",strlen(arr));
//strlen作用是求字串arr的長度
//顯示答案為4
}
注意:計算機會在字串末尾自動添加字符’\0’作為結束標志,該’\0’占用1個byte記憶體,但不算在字串長度內,計算機遇到’\0’時就截斷為字串,否則會順著相鄰記憶體存放的亂碼找下去,直到找到’\0’,
- 轉義字符
如果你仔細觀察,你會發現很多問題,printf列印時出現的\n是什么,n不就是’n’字符嗎?這就涉及到轉義字符了,轉義字符:即轉變字符的含義,使它具有某種新的作用,具體有:
| 轉義字符 | 釋義 |
|---|---|
| \n | 換行(由’n’變為起換行作用) |
| \’ | 用于表示字符常量’(例如你想列印字符’,即’ ’ ‘,計算機識別到’ ‘就把它們配對了,所以應轉義’ \’ ') |
| \" | 用于表示字串內部的雙引號 |
| \\ | 用于表示1個\,防止它被轉義為序列符 |
| \a | 警告字符,把a轉義起到蜂鳴一聲的作用 |
| \b | 退格符 |
| \r | 回車符 |
| \ddd | ddd表示1~3個八進制的數字,作用是把八進制ddd轉義為十進制,例如:\130=88、 \12=10 |
| \xdd | dd表示2個十六進制數字,作用同理,例如:\x12=18 |
| … |
選擇陳述句
有時候選擇比努力更重要,那么,C語言中怎么實作選擇呢?常用有if…else陳述句和switch陳述句,
- if…else 陳述句:
#incldue <stdio.h>
int main()
{
int i=2
if(i<3)//(在這里面輸入條件)
{
printf("%d\n",i);
//列印i的值
}
/*如果條件成立,則執行{}內的陳述句*/
else
{
pritnf("i>=3");
}
/*否則執行else下{}內的陳述句*/
/*注意:可單獨使用if,但else需與相
鄰if配對使用*/
return 0;
}
- switch陳述句:
#include <stdio.h>
int main()
{
int num=1;
switch(num)//選擇第num中情況
{
case 1:
{
//此處為情況1執行的陳述句
break;
//執行遇到break則跳出switch選擇陳述句
}
case 2:
...
default:
{
}
/*若輸入的num不在選擇的情況
中,則執行default的{}*/
}
return 0;
}
回圈陳述句
我們總是很反感要多次重復地做同一件事,那就交給C語言的回圈陳述句吧!回圈陳述句有:while陳述句、for陳述句和do…while陳述句,
#include <stdio.h>
int main()
{
int arr[10]=0;
int i=0;
while(i<10)//判斷條件,成立則執行{}內陳述句
{
arr[i]=i+1;
/*把第i個陣列元素賦值為i+1*/
i=i+1;
}
return 0;
}

#include <stdio.h>
int main()
{
//與while陳述句相似
int sum=0;
int i=1;
do
{
sum=sum+i;//把sum和i的值相加再賦值給sum
i=i+1;
}while(i<=10);
/*先執行do{},然后判斷條件是否處理,
一直回圈直到條件不成立*/
//該回圈sum=1+2+...+10=55
return 0;
}

#inlcude <stdio.h>
int main()
{
int i=0;
int sum=0;
for(i=1;i<=10;i=i+1)
{
sum=sum+i;
}
/*結果與do...while一樣*/
/*for括號內有三個分號:
(初始化回圈變數的值 ; 判斷條件是否成立 ;
執行完一遍后變數進行的處理 )*/
return 0;
}
函式
如果你要求三角形的面積,你會把三角形相關的數代到:S=1/2×底邊×高,那么,類似于公式這種有著單一功能的工具我們就可以用C語言中的函式實作,

#include <stdio.h>
int SUM(int x, int y);
//宣告一個求和函式SUM
int main()
{
int a=1;
int b=2;
int sum=SUM(a,b);
//呼叫SUM函式求a與b的和
}
//SUM函式的實作:
int SUM(int x,int y)
{
int sum;
//sum的型別要與函式回傳型別一致
sum=x+y;
//把a和b的值分別賦給x和y,求和后賦值給sum
return sum;
//該函式回傳值sum
}
運算子
數學里運用各種符號來處理處理數字,比如說我們常見的± * /、Σ等,C語言中也有很多運算子用來供我們使用,由于運算子內容多且雜,本篇只介紹一些簡單常用的運算子,
| 運算子 | 用法 |
|---|---|
| + - * | 與實際生活中數學相對應 eg: 運算式 1+2的值為3 |
| / | / 較特殊,當左右兩個值的int型別是,結果為整型;若其中有一個為float/double型別時為小數,eg:3/1為3、3/2為1(1. …)、2/1.0為2.000000 |
| % | 取兩個整數相除的余數 eg:5%2為1 |
| = | 賦值運算子 把右邊的值賦值給左邊,所以左邊要為可修改的變數 |
| == | 相當于實際中的= 例如2= =3這個表達是錯誤的 2= =2則是正確的 |
| > >= < <= | 與實際生活中數學相對于 |
| … |
結構體
由上述我們知道,如int、char等基本的資料型別能表示一些事物的基本屬性,但當我們想要表示事物的全部或部分屬性時,單一基本資料型別就不能滿足要求了,這時,C語言提供以一種自定義資料型別,結構體,英文關鍵字struct,

#include <stdio.h>
struct student
{
float height;
int age;
int class;
};
int main()
{
struct student Lihua;
/*與int a;作用是類似的,定義變數Lihua,
資料型別為struct student.*/
//struct student為自定義資料型別
Lihua.height = 175.8;//李華身高賦值為175.8
Lihua.age = 18;//李華的年齡賦值為18
Lihua.class = 1;//李華的班級賦值為1
return 0;
}
指標
持續更新中…
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/286197.html
標籤:AI
