初識C語言
本章節的筆記只是對C語言的基礎知識的一個小概括
詳細的講解筆記后續會細講
一、C語言的概念
C語言就是一門通用的計算機語言,廣泛應用于底層開發,
二、第一個C語言程式
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
說明:
- #include <stdio.h>是該程式的頭檔案,因為該函式運用到了printf()函式,所以需要引頭檔案,
- 接下來是一個main()函式,C語言有規定,一個完整的C語言程式由一個或多個函陣列成,必須有且只有一個main()函式,其可以出現在程式任何位置,程式由此開始執行,也結束于此,
- printf()是一個標準輸出函式,
- return 0的作用是向作業系統回傳一個零值,表示程式正常執行完畢,
三、資料型別
型別名稱
- char 字符資料型別
- short 短整型
- int 整型
- long 長整型
- long long 更長的整形
- float 單精度浮點數
- double 雙精度浮點數
- unsigned int 無符號整型
- unsigned short 無符號短整型
- unsigned long 無符號長整型
- 以及更多
格式控制
- %c 字符
- %hd 短整型
- %d 整型
- %s 字串
- %f 單精度浮點數
- %lf 雙精度浮點數
- %p 地址格式
- %x 十六進制
- %o 八進制
型別的大小
#include <stdio.h>
int main()
{
printf("%d\n",sizeof(char));
printf("%d\n",sizeof(short));
printf("%d\n",sizeof(int));
printf("%d\n",sizeof(long));
printf("%d\n",sizeof(long long));
printf("%d\n",sizeof(float));
printf("%d\n",sizeof(double));
printf("%d\n",sizeof(long double));
return 0;
}
結果:

說明:
關于sizeof()的說明
(1)sizeof()的括號內的內容是不進行計算的
(2)sizeof()是運算子不是函式
(3)sizeof()運算子有以下兩種格式
1.用于求得運算式的值所占記憶體的位元組數,其格式如下:
sizeof 運算式
2.用于求得某種資料型別的量所占記憶體的位元組數,其格式如下:
sizeof (運算式)
型別的使用
char ch = 'w';
float weight = 101.5;
int salary = 20000;
四、常量、變數
常量、變數的概念
數學中常數的概念:常數是指固定不變的數值,比如圓周率、真空光速等,
數學中變數的概念:變數是指沒有固定的值,可以改變其值,有字母符號來表示,比如y=f(x),x是自變數,y是因變數,
計算機中常量的概念:常量是指在程式運行程序中其值不能改變的量,比如數值和字符值本身就是常量,
計算機中變數的概念:變數是指在程式運行期間其值可以改變的量,比如前面的int a,a就是變數,
定義變數的方法
int age = 150;
float weight = 45.5f;
char ch = 'w';
變數的分類
- 區域變數
- 全域變數
#include <stdio.h>
int global = 2019;//全域變數
int main()
{
int local = 2018;//區域變數
int global = 2020;//區域變數
printf("global = %d\n",global);
return 0;
}
總結:
當區域變數和全域變數同名的時候,區域變數優先使用
變數的使用
#include <stdio.h>
int main()
{
int a=0,b=0,sum=0;
printf("請輸入兩個運算元:>");
scanf("%d%d",&a,&b);//輸入函式
sum = a + b;
printf("sum = %d\n",sum);//輸出函式
return 0;
}
說明:scanf()等函式使用時存在不安全,若使用VS提供的函式則會存在跨平臺障礙,固應在源檔案第一行寫
#define _CRT_SECURE_NO_WARNINGS 1
由此來忽略函式存在不安全的警告或錯誤,
使默認有這句話的話應該打開VS2019的檔案位置??Program Files (x86)??Microsoft Visual Studio??2019??Professional??在搜索框內搜vcprojectitems并點??右擊newc++file,用Notepad++寫上那句話并保存就可以每次默認忽略不安全問題,
變數的作用域和生命周期
作用域
作用域概念:一段程式代碼中所用到的名字并不總是有效/可用 的 而限定這個名字的可用性的代碼范圍就是這個名字的作用域,
- 區域變數的作用域是變數所在的區域范圍,
- 全域變數的作用域是整個工程,在工程的另一個檔案里用到該全域變數時需要進行申明,就需要用到extern關鍵字,比如extern int global;
生命周期
生命周期概念:變數的創建到變數的銷毀之間的一個時間段
- 區域變數的生命周期是:進入作用域生命周期開始,出作用域生命周期結束,
- 全域變數的生命周期是:整個程式的生命周期,
常量
常量的分類
- 字面常量
- const修飾的常變數
- #define定義的識別符號常量
- 列舉常量
#include <stdio.h>
#define MAX 5+5//#define定義的 識別符號常量,但凡MAX出現,那就相當于5+5(不是10)
enum Sex//列舉常量的應用,enum Sex就是一個型別
{
MALE,
FEMALE,
SECRET
};
int main()
{
52.4;//字面常量
const float a = 5;
//const 修飾的常量,經此常變數a將不可改變(a本質上仍然是變數,不可以放在陣列的[]中),不然會報錯
return 0;
}
五、字串、轉義字符、注釋
字串
字串是由一對" "括起來的字符序列(包括轉義字符),其結束標志是\0,計算字串長度的時候 \0 是結束標志,不算作字串,但是會占記憶體一個位元組,
#include <stdio.h>
//列印字符
int main()
{
char arr1[] = "Hello";
char arr2[] = {'H','e','l','l','o'};
printf("%s\n",arr1);//正常列印
printf("%s\n",arr2);//會有亂碼,因為字符列印唯有遇到\0才會停止
return 0;
}
轉義字符
轉義字符的概念:以’'開頭的特殊字符序列,也是字符常量的一種,記憶體中占一個位元組
| 轉義字符 | 釋義 |
|---|---|
| \‘ | 用于表示字符常量’ |
| \“ | 用于表示一個字串內部的雙引號 |
| \\ | 用于表示一個反斜杠,防止它被解釋為一個轉義序列符, |
| \? | 在書寫連續多個問號時使用,防止他們被決議成三字母詞 |
| \a | 警告字符,蜂鳴 |
| \b | 退格符 |
| \f | 進紙符 |
| \n | 換行 |
| \r | 回車 |
| \t | 水平制表符 |
| \v | 垂直制表符 |
| \ddd | ddd表示1~3個八進制的數字,\130 就是X |
| \xdd | dd表示2個十六進制數字,\x30 就是0 |
注釋
注釋用于不需要的代碼,可以注釋掉或者代碼比較難懂,可以加注釋
分格:
1./*xxxxxx*/ 缺陷:不能嵌套注釋
2.//xxxxxxxx 可以注釋一行也可以注釋多行,推薦
六、選擇陳述句
#include <stdio.h>
int main()
{
int a = 3,b = 5;
if(a > b)
printf("%d",a);//運用if-else陳述句,輸出較大值
else
printf("%d",b);
return 0;
}
七、回圈陳述句
- while 陳述句
- for 陳述句
- do…while陳述句
//while回圈的實作
#include <stdio.h>
int main()
{
int i = 0;
while(i < 10)
{
printf("%d",i);
i++;
}
return 0;
}
八、函式
#include <stdio.h>
int Add(int a,int b)
{
return a + b;
}
int main()
{
int a = 0,b = 0,sum = 0;
scanf("%d %d",&a,&b);
sum = Add(a,b);
printf("%d",sum);
return 0;
}
函式的特點就是簡化代碼,方便代碼的重復使用
九、陣列
陣列的概念:一組相同型別元素的集合
陣列的定義
int arr[10] = {1,2,3,4,5,6,7,8,9,10}
- 陣列可以不完全定義,未定義的就算0
- 陣列的[ ]中不可以是變數
- 陣列的下標從0開始
陣列的使用
#include <stdio.h>
int main()
{
int i = 0;
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
while(i<10)
{
printf("%d ",arr[i]);
}
return 0;
}
十、運算子
算術運算子 例如:+ - * / %
移位運算子 例如:>> <<
位運算子 例如:& ^ |
賦值運算子 例如:= += -= *= /= &= ^= != >>= <<=
單目運算子 例如:! - + & sizeof – ++ ~ (型別)
關系運算子 例如:> >= < <= != ==
邏輯運算子 例如:&& ||
條件運算子 例如:exp1 ? exp2 : exp3(exp1條件為真則執行exp2,為假則執行exp3)
逗號運算式 例如 :exp1, exp2, exp3, …expN(從左向右計算,整個運算式結果是最后一個運算式的結果)
下標參考、函式呼叫和結構成員 例如:[] () . ->
十一、常見關鍵字
C語言提供的關鍵字,不能自己創建關鍵字
關鍵字不能做變數名
| 關鍵字 | 作用 | 關鍵字 | 作用 |
|---|---|---|---|
| auto | 宣告自動變數 | extern | 宣告變數是在其他檔案正宣告 |
| short | 宣告短整型變數或函式 | register | 宣告暫存器變數 |
| int | 宣告整型變數或函式 | static | 宣告靜態變數 |
| long | 宣告長整型變數或函式 | volatile | 說明變數在程式執行中可被隱含地改變 |
| float | 宣告浮點型變數或函式 | void | 宣告函式無回傳值或無引數,宣告無型別指標 |
| double | 宣告雙精度變數或函式 | if | 條件陳述句 |
| char | 宣告字符型變數或函式 | else | 條件陳述句否定分支(與 if 連用) |
| struct | 宣告結構體變數或函式 | switch | 用于開關陳述句 |
| union | 宣告共用資料型別 | case | 開關陳述句分支 |
| enum | 宣告列舉型別 | for | 一種回圈陳述句 |
| typedef | 用以給資料型別取別名 | do | 回圈陳述句的回圈體 |
| const | 宣告只讀變數 | while | 回圈陳述句的回圈條件 |
| unsigned | 宣告無符號型別變數或函式 | goto | 無條件跳轉陳述句 |
| signed | 宣告有符號型別變數或函式 | continue | 結束當前回圈,開始下一輪回圈 |
| break | 跳出當前回圈 | default | 開關陳述句中的“其他”分支 |
| sizeof | 計算資料型別長度 | return | 子程式回傳陳述句(可以帶引數,也可不帶引數)回圈條件 |
簡單介紹幾個:
-
typedef
typedef 型別定義,就是對型別的重命名
typedef unsigned int u_int; //將unsigned int重命名為u_int,u_int變成了一個型別名 int main() { unsigned int num1 = 0; u_int num2 = 0;//這一句起的作用和上一句是一樣的 return 0; } -
static
-
static修飾區域變數
改變了區域變數的生命周期,本質上是改變了變數的存盤型別,從存盤在堆疊區到存盤到靜態區,
-
static 修飾全域變數
使得這個全域變數只能在自己所在的源檔案內部可以使用,其他源檔案不能使用,
-
static修飾函式
使這個函式只能在本源檔案內使用,不能在其他源檔案內使
十二、#define 定義常量和宏
#define MAX 100//define 定義識別符號常量 #define ADD(x,y) ((x)+(y))//define 定義宏 #include <stdio.h> int main() { int sum = ADD(2,3);//5 sum = 10*ADD(2,3);//50 return 0; }十三、指標
#include <stdio.h> int main() { int num = 10; int*ps = num;//num的地址存在了指標變數ps里 *ps = 20;//解參考ps,ps指向變數num,因此可以來改變num中的值 return 0; }指標大小在32位平臺是4個位元組,64位平臺是8個位元組
十四、結構體
#include <stdio.h> struct Stu { char name[20]; int age; char sex[5]; }; int main() { struct Stu s = {"張三",20,"男"};//結構體的創建和初始化 struct Stu*ps = &s; printf("%s %d %s",s.name,s.age,s.sex);//結構體變數.成員變數 printf("%s %d %s",ps->name,ps->age,ps->sex);//結構體指標->成員變數名 return 0; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/274101.html
標籤:其他
