亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

??整理2萬字帶你走進(jìn)C語言(詳細(xì)講解+代碼演示+圖解)??(強(qiáng)烈建議收藏?。。。?

邱勇 / 4253人閱讀

目錄

一、什么是C語言?

二、第一個C語言程序

代碼

程序分析

?程序運(yùn)行

一個工程中出現(xiàn)兩個及以上的main函數(shù)

代碼

運(yùn)行結(jié)果

分析

三、數(shù)據(jù)類型

數(shù)據(jù)各種類型

為什么會有這么多的數(shù)據(jù)類型?

計算機(jī)單位

?各個數(shù)據(jù)類型的大小

?注意事項(xiàng)

數(shù)據(jù)類型的使用

四、變量和常量

變量的分類

變量的使用

變量的作用域和生命周期

?常量

五、字符串+轉(zhuǎn)義字符+注釋

字符串

?轉(zhuǎn)義字符

注釋

六、選擇語句

?七、循環(huán)語句

?八、函數(shù)

九、數(shù)組

數(shù)組是什么呢?

定義數(shù)組

數(shù)組的使用

十、操作符

十一、常見關(guān)鍵字

十二、#define 定義常量和宏

#define定義的標(biāo)識符常量

定義宏

十三、指針

前言

引例

計算機(jī)是怎么對內(nèi)存單元編號的呢?

?內(nèi)存空間的地址如何得到

想存地址怎么辦?

?

本質(zhì)目的不是為了存地址

指針變量的大小

?十四、結(jié)構(gòu)體

為什么會有結(jié)構(gòu)體呢?

創(chuàng)建結(jié)構(gòu)體


本文主要是先帶大家全局的認(rèn)識一下C語言,將C語言的主要的東西都看看,了解一下,對C語言先產(chǎn)生一個認(rèn)識,每個知識點(diǎn)后面都會多帶帶寫博客詳細(xì)介紹。

一、什么是C語言?

C語言是一門通用的計算機(jī)編程語言,廣泛應(yīng)用于底層開發(fā),C語言的設(shè)計目標(biāo)是提供一種能以簡易的方式編譯、處理低級存儲器、產(chǎn)生少量的機(jī)器碼以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的編程
語言,保持著良好跨平臺的特性。

由于C語言的各大優(yōu)點(diǎn)使得各大開發(fā)廠商紛紛使用,并且各個廠商都有了自己的C語言,這就使得各廠商的C語言語法出現(xiàn)差異,為了避免這種情況,由美國國家標(biāo)準(zhǔn)局為C語言制定了一套完整的美國國家標(biāo)準(zhǔn)語法,稱為ANSI C,作為C語言最初的標(biāo)準(zhǔn)。

并且C語言是一門面向過程的編程語言,編譯器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。其中MSVC便是微軟的C語言編譯器,VS2019中的C語言便是MSVC編譯器。編譯環(huán)境的詳細(xì)搭建步驟我也已經(jīng)寫了,請點(diǎn)擊這里查看C語言編譯環(huán)境的搭建。 

計算機(jī)語言類比理解表
語言用途舉例
人類的語言人與人之間交流漢語,英語
計算機(jī)語言人與計算機(jī)交流的語言C/C++/JAVA

C語言廣泛應(yīng)用于底層的軟件開發(fā)

二、第一個C語言程序

代碼

#include int main(){	printf("Hello world!");	return 0;}

程序分析

?一個C語言代碼中必須包含一個main函數(shù)--主函數(shù),main函數(shù)是程序的入口,有固定寫法。要注意的是一個工程中只能有一個main函數(shù)。

main前面的int表示函數(shù)返回類型為整型,左花括號表示函數(shù)開始,右花括號表示函數(shù)結(jié)束;花括號所包含的部分叫做函數(shù)體,為該函數(shù)所要實(shí)現(xiàn)的邏輯功能語句。return 0表示返回值是0,0為整數(shù),與前面的int相呼應(yīng)。printf----print function----打印函數(shù),而printf屬于庫函數(shù),是C語言自身提供的函數(shù),庫函數(shù)的使用必須要引用頭文件,所以使用了#include 。stdio--standard input output--標(biāo)準(zhǔn)輸入輸出函數(shù)

?程序運(yùn)行

在菜單欄中有 調(diào)試--開始執(zhí)行(快捷鍵Ctrl+F5)

一個工程中出現(xiàn)兩個及以上的main函數(shù)

我們用一段代碼來驗(yàn)證一下

代碼

#include int main(){	printf("Hello world!");	return 0;}int main(){	printf("Hello world!");	return 0;}

運(yùn)行結(jié)果

?編譯器報錯

如果是在同一個工程中不同的.c文件中呢,也是一樣的,同一個工程中只能有一個main函數(shù)。

分析

我們前面說過,main函數(shù)是程序的入口,如果一個工程出現(xiàn)多個main函數(shù),那么這個程序到底從哪里開始執(zhí)行,從哪個main函數(shù)進(jìn)去是不確定的。

三、數(shù)據(jù)類型

我們在生活中經(jīng)常會用到各種各樣的數(shù)據(jù),例如年齡,體重,價格等等,而不同的數(shù)據(jù)的類型也是不一樣的,比如年齡是整數(shù),體重是小數(shù)。

我們寫程序,寫軟件也是為了能夠解決生活中的問題,描述生活中的問題,所以C語言它有各種數(shù)據(jù)類型。

數(shù)據(jù)各種類型

char字符數(shù)據(jù)類型字符

short

短整型整數(shù)
int?整型
long長整型
long long更長的整型
float單精度浮點(diǎn)數(shù)小數(shù)
double雙精度浮點(diǎn)數(shù)

為什么會有這么多的數(shù)據(jù)類型?

我們的生活中本來就有很多種數(shù)據(jù)類型,在寫代碼的時候,我們選擇合適的數(shù)據(jù)類型去創(chuàng)建變量,解決問題,使得空間利用率更高,并且更加豐富的表達(dá)生活中的各種值。

計算機(jī)單位

?各個數(shù)據(jù)類型的大小

C語言中有一個關(guān)鍵字sizeof可以用來計算各種變量,數(shù)據(jù)類型的大小

如下代碼:

#include 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));}

運(yùn)行結(jié)果:

?注意事項(xiàng)

(注意:sizeof計算出來的結(jié)果單位是字節(jié))

我們會發(fā)現(xiàn)int為整型,而long是長整型,結(jié)果運(yùn)行結(jié)果中int和long的大小一樣,這是怎么回事呢?注意在這里C語言標(biāo)準(zhǔn)規(guī)定,sizeof(int)<=sizeof(long),并且sizeof(long)<=sizeof(long long)

32位平臺sizeof(long)大小為4個字節(jié),而在64位平臺,sizeof(long)大小為8個字節(jié)

數(shù)據(jù)類型的使用

選擇合適的數(shù)據(jù)類型,如下代碼:

int main(){	//這里創(chuàng)建一個年齡的變量	//short的范圍為-32768~32767,足夠表示年齡	short age = 18;	//創(chuàng)建一個變量表示體重	double weight = 58.9;	return 0;}

四、變量和常量

變量:生活中有些值是可變的(eg.年齡,身高,體重等),C語言中用變量來表示

常量:有些值是不變的(eg.身份證號,血型等),C語言中用常量來表示

變量的分類

  • 局部變量
  • 全局變量

我們通過這段代碼來了解全局變量與局部變量

#include //全局變量int i = 20;int main(){    //局部變量	int i = 10;   	printf("%d/n", i);	return 0;}

運(yùn)行結(jié)果:

?那么這里為什么運(yùn)行結(jié)果是10而不是20呢?

有幾個點(diǎn)需要注意:

  1. 花括號外面的為全局變量,花括號里面的為局部變量
  2. 當(dāng)全局變量與局部變量名字相同時,局部變量優(yōu)先
  3. 局部變量和全局變量的名字建議不要相同--容易誤會,產(chǎn)生bug

變量的使用

#include int main(){	int n1 = 0;   //定義整型變量n1,n2和num并初始化為0	int n2 = 0;	int sum = 0;	printf("請輸入n1和n2/n");     //提示用戶輸入	scanf("%d%d", &n1, &n2);    //輸入想要進(jìn)行運(yùn)算的兩個數(shù)	sum = n1 + n2;      //將n1和n2相加并賦值給sum	printf("sum=%d/n", sum);    //打印sum的值    return 0;}

說明

scanf函數(shù):代碼中用到scanf函數(shù),屬于庫函數(shù),也是要引頭文件。按用戶指定的格式從鍵盤上把數(shù)據(jù)輸入到指定的變量之中,這行代碼就是讓用戶從鍵盤輸入兩個整數(shù)到n1和n2的空間當(dāng)中,%d表示以整數(shù)形式進(jìn)行輸入;后面的&n1表示取地址n1,將輸入的第一個整數(shù)存儲到n1的空間中,&n2也是如此。一句話概括就是通過鍵盤給程序中的變量賦值。

注意事項(xiàng):

  1. 在 scanf 的“輸入?yún)?shù)”中,變量前面的取地址符&不要忘記
  2. “輸出控制符”和“輸出參數(shù)”無論在“順序上”還是在“個數(shù)上”一定要一一對應(yīng)。
  3. “輸入控制符”的類型和變量所定義的類型一定要一致。對于從鍵盤輸入的數(shù)據(jù)的類型,數(shù)據(jù)是用戶輸入的,開發(fā)者是無法決定的,所以在寫程序時要考慮容錯處理。
  4. 使用 scanf 之前先用 printf 提示輸入

printf函數(shù):%d表示以整數(shù)形式進(jìn)行打印。

這兩個函數(shù)中,其中格式控制字符串用于指定格式。格式控制串可由格式字符串和非格式字符串兩種組成。格式字符串是以%開頭的字符串,在%后面跟有各種格式字符,以說明輸出數(shù)據(jù)的類型、形式、長度、小數(shù)位數(shù)等,如下所示:

%d??????//打印整型

%c??????//打印字符

%f??????//打印浮點(diǎn)數(shù)

%p??????//以地址的形式打?。ù蛴〉刂罚?/p>

%x??????//打印16進(jìn)制整數(shù)

%o??????//打印8進(jìn)制整數(shù)

變量的作用域和生命周期

作用域(scope):這個變量哪里可以使用,哪里可以起作用,哪里就是它的作用域

  1. ?局部變量的作用域是變量所在的局部范圍。
  2. ?全局變量的作用域是整個工程。

生命周期:變量的生命周期指的是變量的創(chuàng)建到變量的銷毀之間的一個時間段

  1. 局部變量的生命周期是:進(jìn)入作用域生命周期開始,出作用域生命周期結(jié)束
  2. 全局變量的生命周期是:整個程序的生命周期。

可以通過以下代碼的對比來深刻理解作用域

代碼1:

#include int main(){	{		int n = 10;		printf("n=%d/n", n);	}	return 0;}

運(yùn)行結(jié)果:

代碼2:

#include int main(){	{		int n = 10;		//printf("n=%d/n", n);	}	printf("n=%d/n", n);	return 0;}

運(yùn)行結(jié)果 :

?分析:離int n = 10;最近的花括號所包含的里面就是變量n的作用域,它的地盤,而一但出了花括號,它就不起作用了。所以就會報錯。

代碼3:

#include int a = 10;    //全局變量void test()   //這里定義一個函數(shù)進(jìn)行測試{	printf("test-->a=%d/n", a);}int main(){	printf("a=%d/n", a);	test();	return 0;}

運(yùn)行結(jié)果:

?從代碼3就可以看出全局變量的作用域更廣,即整個工程。

?常量

?C語言中的常量和變量的定義的形式有所差異

C語言中的常量分為以下幾種:

  • 字面常量
  • const修飾的常變量
  • #define定義的標(biāo)識符常量
  • 枚舉常量

通過以下代碼來理解這幾種常量

代碼1:

1.字面常量

#include int main(){	//1.字面常量	55;	9.8;	"b";       //直接寫出來的常量就被稱為字面常量	return 0;}

?代碼2(與代碼3進(jìn)行對比):

#include int main(){	int a = 10;	printf("a=%d/n", a);	a = 20;	printf("a=%d/n", a);	return 0;}

?運(yùn)行結(jié)果:

?代碼3:

2.const修飾的常變量

#include int main(){        //2.const修飾的常變量	 const int a = 10;    //用const進(jìn)行修飾,使其成為常變量	printf("a=%d/n", a);	a = 20;	printf("a=%d/n", a);	return 0;}

?運(yùn)行結(jié)果:

?通過代碼2和代碼3的對比即可發(fā)現(xiàn),a本身為變量,但被const修飾之后,它本質(zhì)上還是一個變量,但它又具有了常屬性,不能改,在使用常量的時候是不能用const修飾的常變量的,但可以用它去表示一個不能變的量(具備常屬性的一個變量)

?比如以下情況:

?在創(chuàng)建數(shù)組的時候,數(shù)組的長度應(yīng)該是指定的一個確定的常數(shù),雖然n被const修飾之后具有了常屬性,但它本質(zhì)上還是一個變量,不能作為數(shù)組長度來使用。

3.#define定義的標(biāo)識符常量

代碼1:

?代碼2:

?可以看到這(AGE)也是不能被修改的,因?yàn)樗且环N常量

?4.枚舉常量

在生活中有很多的取值是可以一一列舉的

eg.

性別:男,女,保密

三原色:紅,綠,藍(lán)

星期:1,2,3,4,5,6,7

如下代碼:

?注意:枚舉常量也同樣是不能改變的,從運(yùn)行結(jié)果就可看出,枚舉常量它是有具體的值的,eg.RED值為0,GREEN值為1,BLUE值為2。

五、字符串+轉(zhuǎn)義字符+注釋

字符串

我們首先來認(rèn)識一下字符串,前面我們寫過這樣一個代碼

#include int main(){	printf("hello world!/n");	return 0;}

在printf函數(shù)里面被" "包含的部分即為字符串(這里的/n表示換行的意思)

以下幾種情況均為字符串

"abcde"

"b"

""? ? ? //空字符串

這種由雙引號引起來的一串字符稱為字符串字面值,簡稱字符串

注意:字符串的結(jié)束標(biāo)志是一個/0 的轉(zhuǎn)義字符。在計算字符串長度的時候/0 是結(jié)束標(biāo)志,不算作字符串內(nèi)容。通過以下代碼來理解:

#include int main(){	char arr1[] = "qwert";	char arr2[] = { "q","w","e","r","t" };	printf("%s/n", arr1);	printf("%s/n", arr2);}

大家可以想想這段代碼打印的結(jié)果是什么呢?

結(jié)果如下:

?發(fā)現(xiàn)arr1正常打印,但arr2的打印結(jié)果為什么這么奇怪呢?

?接下來我們仔細(xì)分析一下:

在VS2019編譯器中按F10進(jìn)行調(diào)試,然后打開監(jiān)視器窗口:

?可以在監(jiān)視器窗口中看到arr1和arr2中存的內(nèi)容

?通過這個我們可以發(fā)現(xiàn):arr1中有/0,所以在打印過程中遇到/0停了下來;arr2中沒有/0,打印完qwert之后還未停下,繼續(xù)往后打印,而后面都是隨機(jī)值,所以就打印出來燙燙燙,/0本身的值為0,所以在往后打印過程中恰好有一個值為0,遇到結(jié)束標(biāo)志,打印結(jié)束。

那么我們就可以手動的給arr2后面添加/0或者0來讓它具有結(jié)束的標(biāo)志,不會出錯打印隨機(jī)值。如下代碼:

我們這里再介紹C語言提供的一個庫函數(shù)strlen--string length--字符串長度,這是用來計算字符串長度的,遇到/0結(jié)束,不計算/0;頭文件為? 通過以下代碼來理解:

?我們會看到,arr1里賣弄一共5個字符,長度為5,沒有問題,但這個arr2由于沒有/0作為結(jié)束標(biāo)志,后面全部都是隨機(jī)值,所以strlen一直往后計算,直到遇到第22個值為0,才結(jié)束計算 ,所以它計算出來的21本身就是一個隨機(jī)值。(同樣可以后面添加"/0"或者0來解決)

這里其實(shí)我們也可以通過關(guān)鍵字sizeof來計算,但要注意的是sizeof會將"/0"計算進(jìn)去。如下代碼及結(jié)果:

?轉(zhuǎn)義字符

前面我們見到過"/n","/0"這樣的字符,都是轉(zhuǎn)義字符

我們可以通過以下代碼來體驗(yàn)一下:將c:/code/test.c打印在屏幕上,以下代碼到底能不能實(shí)現(xiàn)?

代碼0:

?通過運(yùn)行發(fā)現(xiàn)打印的并不是我們想要的結(jié)果,這個時候就有了轉(zhuǎn)義字符(轉(zhuǎn)變它原來的意思)的概念。通過以下兩段代碼對比理解一下:

代碼1:

?代碼2:

?通過對比我們就可以發(fā)現(xiàn),在n前面加上/后,它就已經(jīng)不是單純的n了,而有了其他的作用(換行),代碼保存路徑以及請按任意鍵關(guān)閉窗口與hello之間有個空行,而代碼1沒有/n,所以就沒有空行。所以在這里/n就是一個轉(zhuǎn)義字符了。回過頭看,代碼0里面的/t也是一個轉(zhuǎn)義字符了,即水平制表符。

下來我們可以看看都有哪些轉(zhuǎn)義字符:

C語言轉(zhuǎn)義字符
轉(zhuǎn)義字符含義
/?在書寫連續(xù)多個問號時使用,防止他們被解析成三字母詞
/"用于表示字符常量"
/“用于表示一個字符串內(nèi)部的雙引號
//用于表示一個反斜杠,防止它被解釋為一個轉(zhuǎn)義序列符。
/a警告字符,蜂鳴
/b退格符
/f進(jìn)紙符
/n換行
/r回車
/t水平制表符
/v垂直制表符
/ffffdffffd表示1~3個八進(jìn)制的數(shù)字。 如: /130 X
/xdddd表示2個十六進(jìn)制數(shù)字。 如: /x30 0

對以上的轉(zhuǎn)義字符解釋:

  1. /?? 這個轉(zhuǎn)義字符來源于三字母詞----??),編譯器在編譯的時候總會將??)打印為],而我們?nèi)绻胍屵@里的?就只是一個普通的?,就可以寫成/??)這樣的話第一個問號它就會被打印為問號,要想兩個?都被打印出來,可以寫成/?/?)即可
  2. /"??我們通過以下代碼對比來學(xué)習(xí)這個轉(zhuǎn)義字符

代碼1:打印字符"a"

?發(fā)現(xiàn)成功打印出來字符"a"

代碼2:打印字符單引號"""

#include int main(){	printf("%c/n", """);	return 0;}

運(yùn)行程序發(fā)現(xiàn)程序報錯,那么這又是什么原因呢?

就是因?yàn)槿齻€單引號放在一起,自動的前兩個單引號結(jié)合,后面單引號落單了,所以就會報錯,這個時候就可以使用轉(zhuǎn)義字符/"?,使它成為一個普通的字符單引號,字符/"也是如此,不在啰嗦。如下代碼:

?

? ? ? ?

?????????3.//? 雙斜杠這個轉(zhuǎn)義字符其實(shí)它的用途就是我們剛才的代碼0,我們想要將代碼路徑c:/code/test.c打印到屏幕上,但是里面的/t

是一個轉(zhuǎn)義字符,現(xiàn)在我們不想讓它轉(zhuǎn)義,就想讓他打印出來/t,我們就可以使用//將它再次轉(zhuǎn)義,使/t?里面的斜杠就只是一個斜杠,如下:

?

? ? ? ? ?4./t? 水平制表符,相當(dāng)于起到了電腦鍵盤table鍵的作用

????????5.接下來我們來說說最后兩個轉(zhuǎn)義字符/ffffd和/xdd??,涉及到8進(jìn)制和16進(jìn)制

平時我們用到的10進(jìn)制數(shù)就是由0-9這10個數(shù)構(gòu)成的,那么8進(jìn)制就是由0-7這8個數(shù)構(gòu)成(16進(jìn)制就是由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F(xiàn)來表示,A--10,B--11,C--12,D--13,E--14,F(xiàn)--15),在/后面跟3個8進(jìn)制數(shù),eg./061

運(yùn)行以下代碼看看結(jié)果

?可以看到結(jié)果是1,但是8進(jìn)制數(shù)061的10進(jìn)制數(shù)也不是1呀,為什么結(jié)果是1呢?因?yàn)樵谶@里它是一個字符,將8進(jìn)制數(shù)轉(zhuǎn)化為10進(jìn)制數(shù)49(ASCII碼值)之后所對應(yīng)的那個字符是1。

再詳細(xì)說說,我們的鍵盤上可以敲出來一系列的字符,eg.@#$%^&*,但是計算機(jī)只能識別二進(jìn)制呀,所以人們就給字符編了統(tǒng)一的號碼,eg.? a--97,b--98………將這種編碼稱為ASCII編碼(有專門的ASCII碼表),而字符"1"的ASCII值為49,轉(zhuǎn)化為8進(jìn)制也就是061。

/xdd 這個轉(zhuǎn)義字符我們就不再啰嗦,和/ffffd同樣的道理

下面來一道筆試題進(jìn)行練習(xí)

//程序打印的結(jié)果是什么?#include int main(){    printf("%d/n", strlen("abcdef"));    printf("%d/n", strlen("c:/test/328/test.c"));    return 0;}

?這段代碼的運(yùn)行結(jié)果是什么呢?可以先想想,? 第一個printf的答案比較簡單,就是字符串的長度6(注意strlen函數(shù)不計算/0),而第二個printf的答案呢,18?? 12?還是說14? 這幾個答案都不對。

我們來分析一下,在"c:/test/328/test.c"這個字符串里面,首先/t是轉(zhuǎn)義字符,作為一個整體算作一個字符,/328,這里面的8已經(jīng)超出了8進(jìn)制的范圍(8在這里本身就是一個坑),所以應(yīng)該將/32作為一個整體,16進(jìn)制,所以第二個printf打印的結(jié)果應(yīng)該是14

?

注釋

  1. 代碼中有不需要的代碼可以直接刪除,也可以注釋掉
  2. 代碼中有些代碼比較難懂,可以加一下注釋文字

注意:

C語言風(fēng)格的注釋:/*xxxxxx*/存在缺陷,不能嵌套注釋,嵌套注釋就會出問題

C++風(fēng)格的注釋://xxxxxxx,可以注釋一行也可以注釋多行

六、選擇語句

我們的生活中總是面臨著各種各樣的選擇,怎么選就看自己了

通過以下代碼來體驗(yàn)一下:

?

?這段代碼用到了一個if else語句,當(dāng)if后面圓括號里面的判斷條件為真時,執(zhí)行if下面的語句,當(dāng)條件為假時,執(zhí)行else后面的語句

?七、循環(huán)語句

在我們色生活中也會有很多的事情都在重復(fù),eg.起床,干飯,學(xué)習(xí),睡覺

?C語言里面有3種循環(huán)

  • while語句
  • for語句
  • do……while語句

?通過以下代碼來體驗(yàn)一下

?八、函數(shù)

在數(shù)學(xué)中我們經(jīng)常和函數(shù)打交道,eg. f(x,y)=x+y,這是一個二元函數(shù),該函數(shù)有兩個參數(shù)(變量),x和y,那么其實(shí)C語言里面的函數(shù)和這個也是非常相似的。通過以下代碼來了解一下

?我們之前計算加法都是直接sum=x+y這樣來算的,但在這段代碼中我們定義了一個函數(shù)Add來計算加法。首先創(chuàng)建了兩個變量x,y和z,調(diào)用Add函數(shù),并將Add函數(shù)的返回值賦給z,最后將z的值打印了出來。

重點(diǎn)再來看一下Add函數(shù),前面的int表示該函數(shù)的返回值為int類型,后面括號里面的int x,int y表示Add函數(shù)的兩個參數(shù)均為int類型花括號里面即為函數(shù)體,創(chuàng)建了臨時變量z來接受x+y的值,并在最后將作為返回值返回

函數(shù)的特點(diǎn):簡化代碼代碼復(fù)用

九、數(shù)組

數(shù)組是什么呢?

數(shù)組其實(shí)就是一組數(shù)。比如我們平時要存放一個數(shù)10,那么只需要int a = 10;就可以完成;那如果要存放1,2,3,4,5這5個數(shù)字呢,不可能創(chuàng)建5個整型變量來存放吧,這樣創(chuàng)建和使用都會很麻煩,所以這個時候就有了數(shù)組的概念----一組相同類型元素的集合。

定義數(shù)組

int arr[10] = { 0,1,2,3,4 };

這個代碼中就是定義了一個數(shù)組,int表示數(shù)組內(nèi)的元素類型為整型,arr是數(shù)組名,[10]里面的10表示這個數(shù)組最多放10個元素,后面花括號里面是對這個數(shù)組進(jìn)行了初始化,前五個元素分別初始化為了0,1,2,3,4,而剩下的5個元素會默認(rèn)初始化為0??梢源蜷_監(jiān)視器來看看:

數(shù)組的使用

?關(guān)于數(shù)組:

  1. 數(shù)組首元素的下標(biāo)為0
  2. 通過下標(biāo)來訪問數(shù)組

如果要將數(shù)組中的某個元素打印出來呢?代碼如下:

?全部打印呢?

?代碼中我們通過一個while循環(huán)來實(shí)現(xiàn)打印數(shù)組中的全部內(nèi)容(每次打印一個元素)

十、操作符

  • 算數(shù)操作符

+? ? -? ? *? ? /? ? %

  • 移位操作符

>>? ? <<

  • ?位操作符

&? ? ^? ? |

  • 賦值操作符

=? ? +=? ? -=? ? *=? ? /=? ? &=? ? ^=? ? |=? ? >>=? ? <<=

  • 單目操作符

!? ? ? ? ? ? ? ? ? ? ? ? ? 邏輯反操作
-? ? ? ? ? ? ? ? ? ? ? ? ? 負(fù)值
+? ? ? ? ? ? ? ? ? ? ? ? ?正值
&? ? ? ? ? ? ? ? ? ? ? ? ?取地址
sizeof? ? ? ? ? ? ? ? ? 操作數(shù)的類型長度(以字節(jié)為單位)
~? ? ? ? ? ? ? ? ? ? ? ? ? 對一個數(shù)的二進(jìn)制按位取反
--? ? ? ? ? ? ? ? ? ? ? ? ?前置、后置--
++? ? ? ? ? ? ? ? ? ? ? ?前置、后置++
*? ? ? ? ? ? ? ? ? ? ? ? ? 間接訪問操作符(解引用操作符)
(類型)? ? ? ? ? ? ? ? ? 強(qiáng)制類型轉(zhuǎn)換

  • 關(guān)系操作符

>
>=
<
<=
!=? ? ? ? ? ? ? ? ? ? ? ? ?用于測試“不相等”
==? ? ? ? ? ? ? ? ? ? ? ? 用于測試“相等”

  • 邏輯操作符

&&? ? ? ? ? ? ? ? ? ? ? ? 邏輯與
||? ? ? ? ? ? ? ? ? ? ? ? ? ?邏輯或

  • 條件操作符

exp1 ? exp2 : exp3

  • 逗號表達(dá)式

exp1, exp2, exp3, …expN

  • 下標(biāo)引用、函數(shù)調(diào)用和結(jié)構(gòu)成員

[]? ? ?()? ? ?.? ? ?->

這些操作符我們后面還會繼續(xù)講,這里先簡單了解一下

我們先來了解一下 / 這個操作符,通過以下代碼來體驗(yàn)以下:

#include int main(){	printf("%d/n", 7 / 2);	return 0;}

那么這段代碼的運(yùn)行結(jié)果是什么呢?? ?3.5?

運(yùn)行結(jié)果:

?發(fā)現(xiàn)運(yùn)行結(jié)果是3,這是為什么呢?

來分析一下,C語言里面的 / 和我們平時數(shù)學(xué)中的除號還是有區(qū)別的,這里是整除求商的意思,7除以2本來應(yīng)該是3.5,但這里是整除,商只有3,沒有5,所以結(jié)果為3。那么如果我們想要得到3.5應(yīng)該怎么做呢?只需要讓 / 兩邊的數(shù)字有一個是小數(shù)即可,如下代碼:

那么有沒有哪個操作符是用來整除求余的呢,肯定是有的------%取模操作符,如下代碼:

?7對2整除的余數(shù)便是1

再來看看移位操作符:右移操作符>> 和左移操作符?<

#include int main(){	int a = 8;	printf("%d/n", a >> 1);	return 0;}

這里的a>>1表示將a的值向右移動一位,那么移動一位到底移的是什么位呢? 移的是二進(jìn)制位,那么我們在這里將a先寫成二進(jìn)制形式為1000,而這里的a又是一個整型,4個字節(jié)----32個比特位,準(zhǔn)確來寫應(yīng)該是00000000000000000000000000001000,這里將a向右移動 一位我們通過下圖來更深刻的理解:

?可以看到右移之后1的權(quán)重降低,值變?yōu)?,可以通過運(yùn)行來驗(yàn)證一下

?左移同樣也是這樣,我們通過后面的博客細(xì)細(xì)道來。

位操作符

&? ? ? ? ? ? ?按位(二進(jìn)制位)與

|? ? ? ? ? ? ? ?按位(二進(jìn)制位)或

^? ? ? ? ? ? ? 按位(二進(jìn)制位)異或

同樣通過以下代碼來體驗(yàn)一下:

#include int main(){	int a = 5;	int b = 3;	int c = a & b;	printf("%d/n", c);	return 0;}

通過下圖來理解

?所以a&b的結(jié)果就是1,a|b為7,a^b為6

再看賦值操作符

#include int main(){	int a = 10;	a = a + 3;	printf("%d/n", a);	return 0;}

這里a本來是10,然后a=a+3就是給a加3之后放到a里面去,a就變成了13。并且這里用a+=5也是同樣的效果

單目操作符

前面我們看到的+,它就有兩個操作數(shù),a+b,必須有兩個操作數(shù),而單目操作符就是只有一個操作數(shù)

邏輯反操作 ! ,這個操作符它只關(guān)注操作數(shù)的真假

C語言里面是如何區(qū)分真假的呢?

0----表示假

非0----表示真

通過下面的代碼的結(jié)果來對比一下

下一個操作符 ~ 我們先來了解一下原碼,反碼和補(bǔ)碼的概念

比如int a = -1,我們將十進(jìn)制數(shù)字轉(zhuǎn)化為二進(jìn)制數(shù)字得到的是他的原碼,通過圖來理解

?注意:

  1. 整數(shù)在內(nèi)存中存的是二進(jìn)制補(bǔ)碼
  2. 正整數(shù)的原碼,反碼,補(bǔ)碼相同

以下代碼

#include int main(){	int a = 0;	//分析:	//a的原碼:00000000000000000000000000000000	//補(bǔ)碼:   00000000000000000000000000000000	//按位取反 11111111111111111111111111111111	//反碼;   11111111111111111111111111111110	//原碼:   10000000000000000000000000000001	//所以結(jié)果應(yīng)該是-1	printf("%d/n", ~a);}

這里再加一個小的知識:

在C語言里面0分為+0和-0

+0

原碼:00000000000000000000000000000000

反碼:00000000000000000000000000000000

補(bǔ)碼:00000000000000000000000000000000

-0

原碼:10000000000000000000000000000000

反碼:11111111111111111111111111111111

補(bǔ)碼:10000000000000000000000000000000

自增自減操作符++,--

通過以下代碼來體驗(yàn)一下

#include int main(){	int a = 0;	int b = a++;    //后置++,先使用a的值,然后再讓a加1	int c = 1;	int d = ++c;    //前置++,先讓c加1,然后再把c的值賦給d	printf("a=%d,b=%d/n",a,b);	printf("c=%d,d=%d/n", c, d);}

?強(qiáng)制類型轉(zhuǎn)換操作符

如下代碼:

?3.14是double類型的,將double類型的數(shù)據(jù)賦給int類型,我們發(fā)現(xiàn)編譯器報了一個警告

?那么我們應(yīng)該怎么解決呢?? 這個時候就可以用強(qiáng)制類型轉(zhuǎn)換

#include int main(){	int a = (int)3.14;	return 0;}

關(guān)系操作符

關(guān)系操作符其實(shí)就是用來比較大小,這里主要再來強(qiáng)調(diào)一下判斷相等與不相等,用的是==而不是=

以下情況我們可能后面稍不注意就會犯這種錯誤

int main(){	int i = 1;	if (i = 0)	{		printf("hello");	}	return 0;}

這里會不會把hello打印出來呢?? ?答案就是:不會打印

原因:if后面的條件判斷用了一個賦值,這里不是在判斷i是不是等于0,而是將0賦給i,然后i是0條件為假,就不會打印,應(yīng)該要用==

邏輯操作符

邏輯與 &&? 表示的是如果兩邊的值都為真,那么結(jié)果為真,如果其中有一個為假,那么結(jié)果為假

羅技或 || 表示如果兩邊有一個值為真,那么結(jié)果為真,如果兩個都為假,那么結(jié)果為假

如下代碼示例:

int main(){	int a = 5;	int b = 3;	int c = 0;	int d = 0;	printf("%d,%d/n", a && b, a && c);	printf("%d,%d/n", a || b, d || c);}

條件操作符?

這里的條件操作符有三個操作數(shù),所以也叫三目操作符。exp1 ? exp2 : exp3

含義:表達(dá)式1的結(jié)果如果為真,就執(zhí)行表達(dá)式2,如果表達(dá)式1的結(jié)果為假,就執(zhí)行表達(dá)式3

我們之前寫代碼求兩個數(shù)的最大值都是通過if語句來判斷,現(xiàn)在我們完全可以通過條件操作符來計算,可以極大的簡化代碼。

#include {	int a = 5;	int b = 3;	int max = a > b ? a : b;	printf("%d/n", max);	return 0;}

逗號表達(dá)式

逗號隔開的一串表達(dá)式。逗號表達(dá)式的結(jié)果從左向右依次計算,但表達(dá)式的結(jié)果是最后一個表達(dá)式的結(jié)果

#include int main(){	int a = (1 + 2, 2 - 3, 3 + 5);   //表達(dá)式里面的從左到右以此計算,但最終結(jié)果是最后一個表達(dá)式的結(jié)果	printf("%d/n", a);    //結(jié)果應(yīng)該是3+5==8	return 0;}

函數(shù)調(diào)用操作符

我們在每次調(diào)用函數(shù)的時候都必須要有函數(shù)調(diào)用操作符(),圓括號里面放參數(shù),來傳參

十一、常見關(guān)鍵字

auto? ?break? ?case? ?char? ?const? ?continue? ?default? ?do? ?double? ?else? ?enum? ? extern? ? float? ?for? ?goto? ?if? ?int? ?long? ?register? ?return? ?short? ?signed? ?sizeof? ?static? ?struct? ? switch? ?typedef? ?union? ?unsigned? ?void? ?volatile? ?while

auto關(guān)鍵字平時都是省略的,局部變量都是自動創(chuàng)建,自動銷毀的,所以C語言中的局部變量都是自動變量

auto int a=10;? ? //這里的auto平時都是省略不寫的

break? ? ? ?終止循環(huán)/switch

case? ? ? ? ?switch語句

const? ? ? ? 常變量

continue? ?繼續(xù)循環(huán)

default? ? ? ?switch

enum? ? ? ? ?枚舉

extern? ? ? ? 聲明外部符號

goto? ? ? ? ? ?跳轉(zhuǎn)(不建議使用)

register? ? ? 寄存器關(guān)鍵字

static? ? ? ? ? 靜態(tài)

(1.修飾局部變量,改變的是局部變量的生命周期,和程序的生命周期一樣

? ?2.修飾全局變量,改變了它的作用域,使這個變量只能在自己所在的源文件內(nèi)部使用

? ?3.修飾函數(shù),改變了這個函數(shù)的使用范圍,這個函數(shù)只能在自己所在的源文件內(nèi)部使用)

typedef? ? ? 類型重定義

union? ? ? ? ?聯(lián)合體/共用體

volatile? ? ? ?比較少見

這些關(guān)鍵字,我們后面都會講到。

注意:在創(chuàng)建變量的時候變量名不能是關(guān)鍵字

十二、#define 定義常量和宏

#define定義的標(biāo)識符常量

通過以下代碼來了解一下:

#include #define PI 3.14int main(){	double a = PI;	printf("%lf/n", a);}

這里的PI就是屬于標(biāo)識符常量

定義宏

這里我們來寫一個加法的宏來體驗(yàn)一下:

<

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/119681.html

相關(guān)文章

  • ??擼完這個springboot項(xiàng)目,我對boot輕車熟路!【源碼+視頻都開源】【強(qiáng)烈建議收藏】??

    上次給大家分享了一個springboot+vue的校園招聘系統(tǒng),視頻教程加項(xiàng)目源碼,都是開源的,應(yīng)該說很香了,今天再給大家分享一個不錯的springboot的項(xiàng)目。 老規(guī)矩,開源,開源,開源?。?! 金九銀十來了,小伙伴們,沖??!前面已經(jīng)整理了很多的面試題,拿去學(xué)習(xí)吧! 1,??爆肝!整理了一周的Spring面試大全【含答案】,吊打Java面試官【建議收藏】!?? 2,??肝完了,一天掌握數(shù)據(jù)...

    AZmake 評論0 收藏0
  • ??爆肝十二萬字《python從零到精通教程》,從零教你變大佬??建議收藏

    文章目錄 強(qiáng)烈推薦系列教程,建議學(xué)起來??! 一.pycharm下載安裝二.python下載安裝三.pycharm上配置python四.配置鏡像源讓你下載嗖嗖的快4.1pycharm內(nèi)部配置 4.2手動添加鏡像源4.3永久配置鏡像源 五.插件安裝(比如漢化?)5.1自動補(bǔ)碼神器第一款5.2漢化pycharm5.3其它插件 六.美女背景七.自定義腳本開頭八、這個前言一定要看九、pyt...

    booster 評論0 收藏0
  • ????新生代農(nóng)民工爆肝8萬字,整理Python編程從入門到實(shí)踐(建議收藏)已碼:6萬字????

    人生苦短,我用Python 開發(fā)環(huán)境搭建安裝 Python驗(yàn)證是否安裝成功安裝Pycharm配置pycharm 編碼規(guī)范基本語法規(guī)則保留字單行注釋多行注釋行與縮進(jìn)多行語句數(shù)據(jù)類型空行等待用戶輸入print輸出 運(yùn)算符算術(shù)運(yùn)算符邏輯運(yùn)算符成員運(yùn)算符身份運(yùn)算符運(yùn)算符優(yōu)先級 字符串訪問字符串中的值字符串更新合并連接字符串刪除空白startswith()方法endswith()方法字符串格式化...

    wthee 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<