
本章內(nèi)容是初始C語言的最后一節(jié),后續(xù)會逐一創(chuàng)作更詳細(xì)的文章
1. 操作符本節(jié)簡單介紹幾種操作符,后續(xù)會出文章細(xì)說
操作符可以分為以下幾類:

算術(shù)運算符中/和%值得注意
/如果兩個操作數(shù)都是整數(shù),那么結(jié)果是兩個整數(shù)相除的商,比如6/5=1
想要得到小數(shù),兩操作數(shù)至少有一個是小數(shù),6.0/5=1.2
%兩操作數(shù)必須是整數(shù),結(jié)果為兩數(shù)相除后的余數(shù),
余數(shù)符號和分子相同
(-3) % 5 = -3
3% (-5) = 3單目運算符中的++前置和++后置注意區(qū)分(--類似,以++舉例)
#includeint main()
{int a = 2;
int b = a++;
printf("%d\n", b);//2
printf("%d\n", a);//3
a = 2;
b = ++a;
printf("%d\n", b);//3
printf("%d\n", a);//3
return 0;
} 前置++表示先自增,在引用
后置++表示先引用,在自增注:[] . ->操作符在本文后續(xù)會介紹,與位有關(guān)的操作符后面會出文章細(xì)說
前面我們介紹變量時說過變量的命名不能用關(guān)鍵字,那么C語言都有哪些關(guān)鍵字呢?
C語言常用的關(guān)鍵字有
數(shù)據(jù)類型:
1.內(nèi)置類型:char short int float long double ,long long ,long double,void
2.構(gòu)造類型:enum ,struct,union
3.其他:const extern signed unsigned
存儲類型:auto static register
循環(huán):while do for continue break
選擇:if else switch case default break
特殊:sizeof return goto typedef volatile2.1 typedef關(guān)鍵字typedef亦為類型定義,也可以稱類型重定義,類型替換
當(dāng)某種類型名比較復(fù)雜,用typedef可以簡化類型名稱
通常用typedef重定義結(jié)構(gòu)體類型
在C語言中:
static是用來修飾變量和函數(shù)的
1. 修飾局部變量-稱為靜態(tài)局部變量
2. 修飾全局變量-稱為靜態(tài)全局變量
3. 修飾函數(shù)-稱為靜態(tài)函數(shù)2.2.1 修飾局部變量改變局部變量的生命周期
無static定義
static定義
說明static修飾局部變量改變變量的生命周期,離開test函數(shù)時a不會銷毀。
所以下次調(diào)用test函數(shù)時不會創(chuàng)建變量a,更不會初始化。2.2.2 修飾全局變量無static定義
static定義
報錯為無法解析g_val
說明此時全局變量不具有外部鏈接屬性2.2.3 修飾函數(shù)無static定義
static定義
可以看出來 static修飾函數(shù)使函數(shù)只能在當(dāng)前的源文件中引用該函數(shù)2.2.4 總結(jié)1.修飾局部變量,改變局部變量的存儲方式(堆存儲變?yōu)閿?shù)據(jù)段存儲),體現(xiàn)為生命周期變長
2.修飾全局變量,改變?nèi)肿兞康逆溄訉傩裕ㄍ獠挎溄幼優(yōu)閮?nèi)部鏈接),體現(xiàn)為作用域變小
3.修飾函數(shù),改變函數(shù)的連接屬性(外部鏈接變?yōu)閮?nèi)部鏈接)
只能在定義函數(shù)的源文件中引用函數(shù)附C和指針里的總結(jié)
本屆內(nèi)容僅僅簡單的介紹一下宏定義,后期會出詳細(xì)的文章與大家探討
#define MAX 100 //定義常量我們想寫a+b的函數(shù)可以這么寫
int add(int a, int b)
{return a + b;
}
int main()
{int a = 10, b = 20;
int ret = add(a,b);//運行的時候會進(jìn)入函數(shù)內(nèi)部并且?guī)С龇祷刂?printf("%d", ret);
return 0;
}如果我們定義宏可以這么寫
#define ADD(a,b) ((a)+(b))
int main()
{int a = 10, b = 20;
int ret = ADD(a,b); //編譯的時候就直接將ADD(a,b)替換成((a)+(b))
pritnf("%d", ret);
return 0;總結(jié):
1.宏定義是替換,函數(shù)調(diào)用會進(jìn)入函數(shù)內(nèi)部并且返回值
2.宏定義在編譯的時候就會進(jìn)行,函數(shù)調(diào)用程序運行時才會執(zhí)行4. 指針在熟悉指針之前我們先來說一下內(nèi)存
4.1 內(nèi)存內(nèi)存是電腦上特別重要的存儲器,計算機(jī)中程序的運行都是在內(nèi)存中進(jìn)行的
任務(wù)管理器中可以看見每個程序?qū)?nèi)存的占用有多少,當(dāng)程序運行時,會向內(nèi)存中申請存儲空間存儲程序運行所需要的相關(guān)數(shù)據(jù)。
打個比方,每一個房間都需要空間,而公寓給了每個房間所需要的空間,內(nèi)存就相當(dāng)于公寓,房間相當(dāng)于各種各樣的數(shù)據(jù),數(shù)據(jù)不同,所占用的空間不同,這也是不同程序所占用內(nèi)存不同的原因
常見的內(nèi)存有4G ,8G ,16G ,32G現(xiàn)在我們知道,內(nèi)存是存放數(shù)據(jù)的
每個房間都是獨立的,用隔板將它們分開,并且每個房間都有門牌號,以便我們可以找到對應(yīng)的門戶,因此,對于內(nèi)存
1.內(nèi)存首先被劃分為一個個的內(nèi)存單元
2.內(nèi)存單元有編號針對結(jié)論1,每個內(nèi)存單元占多大空間?
每個內(nèi)存單元占1字節(jié)
解釋:
我們知道存儲容量單位有bit–byte–kb–Mb……而占存儲容量最小的數(shù)據(jù)類型是char 需要8bit位,如果選擇bit最為內(nèi)存單元,而每一個內(nèi)存單元對應(yīng)一個編號,一個char就需要8個編號,過于奢侈,如果選擇一個kb為內(nèi)存單元,那么一個內(nèi)存單元將可以存放1024個char數(shù)據(jù),但是只有一個編號,所以編號和數(shù)據(jù)不能一一對應(yīng),綜上,選擇1byte為內(nèi)存單元最合適。
針對結(jié)論2,內(nèi)存單元是如何編號的?
內(nèi)存單元的編號是從32個0到32個1(32位)
解釋:
32位機(jī)器上,有32根地址線
每根地址線在通電情況下有高電頻和低電頻兩種狀態(tài),所以32根地址線全部通電情況下有2^32種狀態(tài),分別是
因而我們將2^32種通電狀態(tài)作為內(nèi)存單元的編號
32位機(jī)器大內(nèi)存為4G,理由如下:32位機(jī)器的內(nèi)存單元編號最多有2^32種,即內(nèi)存最多有2^32個小單元
,而每一種編號對應(yīng)的內(nèi)存單元占一個字節(jié),所以內(nèi)存共占2^32byte,
1KB=1024byte,1MB=1024KB,1GB=1024MB,2^32字節(jié)剛好就是4GB
同理64位機(jī)器內(nèi)存大為8GB內(nèi)存單元的編號等于地址等于指針
指針就是地址,地址就是指針
我們現(xiàn)在來看程序運行時是怎么使用內(nèi)存的
#includeint main()
{int a = 10;
return 0;
} 
我們調(diào)式一下看一下內(nèi)存的分布
內(nèi)存編號和數(shù)據(jù)內(nèi)容均是十六進(jìn)制顯示
我們再來看一下a的地址
a占4個字節(jié) 我們打印a的地址 屏幕上顯示00EFFE08,
說明a的地址是第一個字節(jié)的地址4.3 指針變量a中存放的是整數(shù),我們稱a為整形變量
&a是一個指針,所以我們將存放指針的變量稱為指針變量

指針變量具有指向性pa中存放的是a的地址,所以我們可以通過pa找到a,相當(dāng)于我知道你家地址,我就可以找到你
int * pa
*說明pa是指針變量
int說明pa所指向的對象是int類型如何通過pa找到a?
*pa = 20;//*是解引用操作符,表示通過pa找到pa所指向的a同理,指向字符的指針這么定義](/upload/otherpic6/a75738c425534b2883f9a54ea8229c72.jpg)
前面我們使用sizeof求過基本數(shù)據(jù)類型的大小,那么指針的大小是多少呢?
我們發(fā)現(xiàn)指針在32平臺上的字節(jié)數(shù)都是4個字節(jié)
這是為什么呢?
指針變量存儲的值是地址,而前面說過內(nèi)存單元的編號取值為32個0到32個1,
即指針的取值為32個0到32個1,32個二進(jìn)制剛好是4個字節(jié)對于64為平臺,64根地址線,指針取值為64個0到64個1,占8個字節(jié)
總結(jié):
-` 變量的地址是變量占據(jù)的第一個字節(jié)地址
前面我們已經(jīng)了解了C語言的基本類型
int,char,short,long,long long,float,double,long double
指針類型等但是上述類型具有單一性,只能用來定義只具有一種性質(zhì)的個體,這是不夠的,對于描述一個學(xué)生,我們不能用上述基本類型的任意一個來定義,因為學(xué)生具有性別、年齡、學(xué)號等多個性質(zhì),因而,我們創(chuàng)建了自定義數(shù)據(jù)類型,結(jié)構(gòu)體就是其中一種
5.1 結(jié)構(gòu)體的創(chuàng)建struct Stu //創(chuàng)建了一種類型,該類型屬于自定義類型中的結(jié)構(gòu)體類型,該類型名叫struct Stu
{char name[20];
int age; //{}內(nèi)的所有變量稱為結(jié)構(gòu)體成員,也叫做域
char sex[5];
char id[15];
}
struct Stu student1 = {"小紅",10,"女","12345"};
//表示用該類型定義了一個變量并初始化5.2 引用結(jié)構(gòu)體對于結(jié)構(gòu)體等有兩個專屬操作符,分別是->和.
例如,student1過生日了,年齡增加了一歲,可以這么表示
student1.[age] = student1.[age] + 1;
//student1表示找到需要引用的結(jié)構(gòu)體變量,操作符.表示找到該變量的某個成員
找到age成員并且讓它加一當(dāng)我們不知道結(jié)構(gòu)體變量的名字時,但是直到它的地址
struct Stu* ps = &student1;
ps->age = ps->age + 1; //等價*(ps).[age]
操作符->的做操作數(shù)是針對指針,表示找到地址值為ps的變量,->表示找到該變量的某個成員初始C語言1
初始C語言2
初始C語言3
三篇文章已經(jīng)將C語言的知識點粗略的介紹的一遍,后續(xù)的文章會逐一針對每章內(nèi)容進(jìn)行更深入、詳細(xì)的討論,如果您覺得哪里寫的有問題,歡迎指正!
最后:如果您覺得文章對您有幫助,請不要吝嗇手中的贊,這對我來說很重要,也是我繼續(xù)創(chuàng)作的動力,謝謝!
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
本文題目:【從0到1手把手帶你學(xué)C語言】初始C語言3-創(chuàng)新互聯(lián)
新聞來源:http://www.chinadenli.net/article22/djdojc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、網(wǎng)站營銷、自適應(yīng)網(wǎng)站、靜態(tài)網(wǎng)站、網(wǎng)站設(shè)計、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容