C語(yǔ)言變量的基本使用二

C語(yǔ)言編程基礎(chǔ)

1.C語(yǔ)言功能:類(lèi)似英語(yǔ),英語(yǔ)是實(shí)現(xiàn)人和人交流溝通的工具

C語(yǔ)言實(shí)現(xiàn)人和計(jì)算機(jī)交流溝通的工具

除了C語(yǔ)言,還有C++,JAVA,Python,Go,Rust等

2.C語(yǔ)言背景簡(jiǎn)介(了解)

1972年由丹尼斯里奇發(fā)明C語(yǔ)言

1978年出版《the c programming language》,預(yù)示著C語(yǔ)言正式走向世界

1989年發(fā)布C89標(biāo)準(zhǔn)(類(lèi)似普通話)

1999年發(fā)布C99標(biāo)準(zhǔn)(擴(kuò)展功能)


3.編寫(xiě)人生第一個(gè)標(biāo)準(zhǔn)C程序

具體實(shí)現(xiàn)步驟:

mkdir -p /home/tarena/stdc/day02

cd /home/tarena/stdc/day02

vim helloworld.c 添加如下內(nèi)容


/*

這是我的第一個(gè)C語(yǔ)言程序

我很激動(dòng)

*/

//這個(gè)僅僅作為一個(gè)測(cè)試

#include <stdio.h>

int main(void){

printf("你好,世界.");

printf("hello,world.\n");

return 0;

}

保存退出

繼續(xù)執(zhí)行以下命令:

gcc helloworld.c 作用:編譯程序

ls -lh 此時(shí)多了一個(gè)a.out文件

./a.out 作用:運(yùn)行a.out程序


4.總結(jié):C程序基本編程規(guī)范

a)C程序?qū)?yīng)的文件有兩種:

源文件:以.c結(jié)尾,例如:helloworld.cd

頭文件:以.h結(jié)尾,例如:stdio.hello

任何C程序必須有一個(gè)源文件,頭文件可以有,可以沒(méi)有


b)C程序注釋(就是程序diamante的解釋說(shuō),給程序員看,不參與程序的編譯和運(yùn)行)

1./*中間就是要解釋說(shuō)明的注釋內(nèi)容*/

? 優(yōu)點(diǎn):可以注釋多行

? 缺點(diǎn):不能嵌套注釋,例如:/*我是大神 /*我是小神*/ */ (錯(cuò)誤語(yǔ)法)

2.//注釋內(nèi)容

? 有點(diǎn):可以嵌套注釋,例如://////我是大神

? 缺點(diǎn):不能多行注釋

c)C程序要包含一個(gè)別人寫(xiě)好的頭文件(就是將頭文件的內(nèi)容全部拷貝過(guò)來(lái)),格式有兩種,

1.語(yǔ)法:#include <頭文件名>

? 例如:#include <stdio.h>

? 語(yǔ)義:告訴gcc編譯器將來(lái)默認(rèn)到linux系統(tǒng)的/usr/include目錄下找stdio.h開(kāi)頭的文件

找到之后將這個(gè)頭文件的內(nèi)容全部拷貝過(guò)來(lái)

2.語(yǔ)法:#include "頭文件名"

? 例如:#include "stdio.h"

? 語(yǔ)義:告訴gcc編譯器現(xiàn)在當(dāng)前目錄下找stdio.h頭文件,如果找到了,那就包含拷貝

如果沒(méi)有找到,再去/usr/include目錄下找頭文件stdio.h,如果找到那就包含拷貝

如果還沒(méi)找到础倍,報(bào)錯(cuò)

d)C程序必須要包含一個(gè)唯一的主函數(shù),名稱(chēng)必須交main

? 并且main函數(shù)的原型(),必須如下:

? int main(void){

//代碼內(nèi)容

? }


? 或者:

? int main(void)

? {

//代碼內(nèi)容

? }


? 結(jié)論:將來(lái)運(yùn)行C程序時(shí),linux操作系統(tǒng)之人main函數(shù),必須從main函數(shù)開(kāi)始從上往下挨個(gè)執(zhí)行


e)C程序的主函數(shù)main中(括號(hào)里面的內(nèi)容)編寫(xiě)規(guī)范:

? 1.每條語(yǔ)句后面必須跟分好";"

? 2.執(zhí)行順序:從上往下挨個(gè)執(zhí)行

? 3.只要遇到或者執(zhí)行return這個(gè)關(guān)鍵字,C程序立馬結(jié)束

return后面可以跟一個(gè)數(shù)字,例如:

return 0; 表示告訴操作系統(tǒng),此程序執(zhí)行結(jié)束了并且執(zhí)行的很正常

return -1; 表示告訴操作系統(tǒng),此程序執(zhí)行結(jié)束了但是執(zhí)行的時(shí)候有點(diǎn)問(wèn)題

例如:main函數(shù)的形式如下

int main(void){

printf("你好,世界.");

printf("hello,world\n");

return 0;

}


f)人生認(rèn)識(shí)的第一個(gè)標(biāo)準(zhǔn)C庫(kù)函數(shù)printf(就是大神寫(xiě)好的函數(shù),我們直接拿來(lái)用即可)

? 1.標(biāo)準(zhǔn)C庫(kù)函數(shù)使用,調(diào)用語(yǔ)法:函數(shù)名(信息);

? 2.printf函數(shù)的功能:向顯示器打印輸出信息

? 3.調(diào)用格式:printf("要輸出打印的信息\n");

注意:'\n':表示回車(chē)換行,就是打印完信息之后將光標(biāo)換到下一行

如果沒(méi)有'\n',光標(biāo)繼續(xù)停留在本行

例如:

printf("abc");

printf("efg\n");

效果:abcdefg

printf("abc\n");

printf("efg\n");

效果:

abc

efg

? 4.注意:要想調(diào)用大神的printf函數(shù),必須開(kāi)頭包含頭文件stdio.

? 5.printf利用占位符可以打印輸出指定的數(shù)字信息

? %d占位符功能:按照整數(shù)形式打印輸出一個(gè)數(shù)字

? 例如:printf("1 + 1 = %d\n",2); 語(yǔ)義:將來(lái)數(shù)字2會(huì)放到%d這個(gè)位置,然后將1+1=2這個(gè)信息輸出到顯示器上

printf("1 + 1 = %d\n",1+1); 語(yǔ)義:先算1+1=2,然后把計(jì)算的結(jié)果放在%d這個(gè)位置最后打印1+1=2

? 5.大名鼎鼎的gcc編譯器(作者:GNU軟件之父理查德斯托曼)

? a)gcc編譯器功能:類(lèi)似翻譯官,將C程序源文件和頭文件翻譯生成計(jì)算機(jī)能夠識(shí)別的可執(zhí)行文件

類(lèi)比:中文版三國(guó)(源文件)----->翻譯官(gcc編譯器)------>英文版三國(guó)(計(jì)算機(jī)識(shí)別的可執(zhí)行文件)

? b)gcc編譯源文件流程三步驟:

1.預(yù)處理:就是將源文件中要包含的頭文件,例如:stdio.h全部拷貝過(guò)來(lái)

? 此過(guò)程簡(jiǎn)稱(chēng)預(yù)處理

? 對(duì)應(yīng)的gcc命令選項(xiàng):-E

? 預(yù)處理的命令:gcc -E -o 預(yù)處理文件.i 源文件.c

? 注意:-o 后面只跟要生成的新文件

? 語(yǔ)義:對(duì)源文件進(jìn)行預(yù)處理生成預(yù)處理文件.i


2.只編譯不鏈接:就是將預(yù)處理文件進(jìn)行單獨(dú)翻譯生成計(jì)算機(jī)能夠識(shí)別的可執(zhí)行文件

但此時(shí)生成的文件不包含大神的代碼,例如:printf

所以此程序此時(shí)還不能運(yùn)行

對(duì)應(yīng)的gcc命令選項(xiàng):-c

對(duì)應(yīng)的gcc命令格式:gcc -c -o 可執(zhí)行文件.o 預(yù)處理文件.i

3.鏈接:就是講大神的各種代碼,例如printf和自己的程序合并起來(lái),合并的專(zhuān)業(yè)術(shù)語(yǔ)叫鏈接

最終生成計(jì)算機(jī)能夠執(zhí)行的一個(gè)完整程序

對(duì)應(yīng)的命令:gcc -o 可執(zhí)行文件 可執(zhí)行文件.o

最終生成可執(zhí)行文件

? c)務(wù)必掌握gcc編譯源文件的三種方式:

1.流氓發(fā):gcc helloworld.c 默認(rèn)都會(huì)生成a.out(這個(gè)名字做不到見(jiàn)名知意)

2.分步編譯:

gcc -E -o helloworld.i helloworld.c //先預(yù)處理

gcc -c -o helloworld.o helloworld.i //然后只編譯不鏈接

gcc -o helloworld helloworld.o //最后鏈接大神的printf代碼,最終生成helloworld可執(zhí)行程序

./helloworld //運(yùn)行程序

3.一步到位

gcc -o helloworld helloworld.c //直接對(duì)源文件進(jìn)行翻譯生成可執(zhí)行文件

? 心里要明白:gcc還要做三件事,只是看不到而已

./helloworld

案例:利用以上三種方法,對(duì)剛才的helloworld.c進(jìn)行編譯運(yùn)行

------------------------------------------------------------------------------------------------------------------

第三課:C語(yǔ)言(C程序)的變量

1.務(wù)必掌握計(jì)算機(jī)內(nèi)存相關(guān)的概念

? 內(nèi)存特點(diǎn):暫存CPU運(yùn)算之前的數(shù)據(jù)和運(yùn)算之后的數(shù)據(jù),還有暫存程序,任何程序都是在內(nèi)存中存儲(chǔ),

所以勢(shì)必要消耗內(nèi)存,速度快,掉電數(shù)據(jù)丟失

結(jié)論:任何程序最終都是玩內(nèi)存

? 字節(jié)(Byte):計(jì)算機(jī)將內(nèi)存分成一格一格,每一格用來(lái)存儲(chǔ)一格數(shù)字,每一格的專(zhuān)業(yè)術(shù)語(yǔ)叫字節(jié)

注意Byte的簡(jiǎn)稱(chēng):B

換算公式:1KB = 1024B

? 1MB = 1024 * 1024KB

? 1GB = 1024MB = 1024 * 1024KB = 1024 * 1024 * 1024B


? 地址(Address):計(jì)算機(jī)給內(nèi)存的每個(gè)字節(jié)指定一格固定的唯一的編號(hào),此編號(hào)從0開(kāi)始,后續(xù)地址加1即可

此編號(hào)的專(zhuān)業(yè)術(shù)語(yǔ)叫地址

切記:不管在哪里,只要知道了內(nèi)存的某個(gè)字節(jié)的地址,將來(lái)就可以通過(guò)地址對(duì)內(nèi)存進(jìn)行訪問(wèn)(讀或者寫(xiě))

類(lèi)似:不管快遞小哥在哪里,快遞小哥知道你的地址,就可以給你送快遞

? 存儲(chǔ)區(qū)(Buffer):計(jì)算機(jī)將1個(gè)字節(jié)或者多個(gè)連續(xù)的字節(jié)形成一個(gè)存儲(chǔ)單元用來(lái)存儲(chǔ)數(shù)字

例如:300億這個(gè)數(shù)字如果用1個(gè)字節(jié)來(lái)存儲(chǔ)顯然這個(gè)數(shù)字太大了,1字節(jié)內(nèi)存存不下

? 可以用4字節(jié)的連續(xù)內(nèi)存來(lái)存儲(chǔ)這個(gè)數(shù)字

? 首地址(base address):存儲(chǔ)區(qū)中第一個(gè)字節(jié)的地址又稱(chēng)首地址


? Q:C程序如何分配內(nèi)存空間來(lái)存儲(chǔ)數(shù)字呢晤碘?

? A:切記,任何程序要想訪問(wèn)內(nèi)存,必須先分配獲取到內(nèi)存才能訪問(wèn)

如果沒(méi)有分配獲取到內(nèi)存,直接去訪問(wèn):操作系統(tǒng)直接將程序干掉,殺死

C程序通過(guò)定義變量來(lái)實(shí)現(xiàn)分配的內(nèi)存!

2.變量功能:就是給C程序分配內(nèi)存空間,一旦分配內(nèi)存臭狗,程序就可以對(duì)內(nèi)存進(jìn)行存儲(chǔ)數(shù)字還可以修改存儲(chǔ)的數(shù)字

3.定義變量(又稱(chēng)分配內(nèi)存)語(yǔ)法格式:

? 數(shù)據(jù)類(lèi)型 變量名 = 初始值(可以有,可以沒(méi)有);

? 例如:int a = 250;

? 說(shuō)明:'int' 它是一個(gè)關(guān)鍵字,它對(duì)應(yīng)一種數(shù)據(jù)類(lèi)型,表示將來(lái)可以分配4字節(jié)的內(nèi)存空間

'a' 變量名

'250' 就是給分配的內(nèi)存放了一個(gè)數(shù)字250

? 結(jié)論:這條語(yǔ)句的結(jié)果是分配了4字節(jié)內(nèi)存空間并且這塊內(nèi)存空間放了一個(gè)數(shù)字250

? 例如:修改變量的值(也就是修改內(nèi)存存儲(chǔ)的數(shù)字)

int a = 250;

a = 520; //修改變量a的值為520,也就是將內(nèi)存中原先的數(shù)字250修改為520,其中"="就是重新賦值的意思

打印變量的值(打印內(nèi)存中存儲(chǔ)的數(shù)據(jù)值):printf("%d\n",a); //將變量a的值打印輸出

4.定義變量的四種形式:

? a)只定義(只分配內(nèi)存)不初始化(不賦初始值)

int a; //此時(shí)變量a的值或者對(duì)應(yīng)的內(nèi)存存儲(chǔ)的數(shù)字是一個(gè)隨機(jī)亂七八糟的數(shù)字

? b)定義并且初始化

int a = 250;

? c)連續(xù)只定義不初始化多個(gè)變量(逗號(hào)分隔)

int a,b,c; //同樣變量的值是亂七八糟的隨機(jī)數(shù)

? d)連續(xù)定義并且初始化多個(gè)變量

int a = 100, b = 200, c = 300;

小案例:演練變量的使用

實(shí)驗(yàn)步驟如下:

cd /home/tarena/stdc/day02

vim var.c

gcc -o var var.c //也可以分步編譯

./var

5.標(biāo)識(shí)符命名規(guī)則

? a)標(biāo)識(shí)符:就是變量名(例如:a,b,c,d等)或者函數(shù)名(例如:main,printf等)

? b)標(biāo)識(shí)符命名規(guī)則:

1.首字符不能是數(shù)字,只能是字母或者下劃線,區(qū)分大小寫(xiě)

? 例如:int 2var; //gcc報(bào)錯(cuò)

int v2ar; //可以

int _2var; //可以

2.盡量做到見(jiàn)名知意

? int a = 18; //你能知道a代表年齡的意思嗎曹体?

? int age = 18; //age就是年齡的意思

? int weight = 200; //體重

? int height = 200; //身高


3.駝峰(windows程序員)和下劃線(linux程序員)

? 駝峰:int nAge = 19;

int GreateWindows = 250;

? 下劃線:int Greate_windows = 250;


4.C語(yǔ)言的關(guān)鍵字不能使用

? 例如:int,return,main,void等不能用

? 例如:int int = 250; //gcc報(bào)錯(cuò)

int void = 250; //gcc報(bào)錯(cuò)

6.C語(yǔ)言的基本編程風(fēng)格:(不強(qiáng)求,其他風(fēng)格都要根據(jù)公司來(lái)定)

? a)各種該

該有空格的加空格

該對(duì)齊的對(duì)齊

該獨(dú)占一行的獨(dú)占一行

該有TAB鍵的就添加TAB鍵

例如:

int main(void){printf("hello,world\n");return 0;} //理論上可以,實(shí)際閱讀起來(lái)要命嫌吠!

應(yīng)該:

int main(void){

//獨(dú)占一行

//對(duì)齊

printf("abc\n");

printf("efg\n");

//獨(dú)占一行

}

? b)代碼盡量寫(xiě)在屏幕左側(cè)的2/3區(qū)域,右側(cè)1/3建議留白,如果超過(guò)換行

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末匾竿,一起剝皮案震驚了整個(gè)濱河市砌烁,隨后出現(xiàn)的幾起案子筷转,更是在濱河造成了極大的恐慌姑原,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,865評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呜舒,死亡現(xiàn)場(chǎng)離奇詭異锭汛,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)袭蝗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)唤殴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人到腥,你說(shuō)我怎么就攤上這事朵逝。” “怎么了左电?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,631評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵廉侧,是天一觀的道長(zhǎng)页响。 經(jīng)常有香客問(wèn)我篓足,道長(zhǎng),這世上最難降的妖魔是什么闰蚕? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,199評(píng)論 1 300
  • 正文 為了忘掉前任栈拖,我火速辦了婚禮,結(jié)果婚禮上没陡,老公的妹妹穿的比我還像新娘涩哟。我一直安慰自己,他們只是感情好盼玄,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布贴彼。 她就那樣靜靜地躺著,像睡著了一般埃儿。 火紅的嫁衣襯著肌膚如雪器仗。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,793評(píng)論 1 314
  • 那天童番,我揣著相機(jī)與錄音精钮,去河邊找鬼。 笑死剃斧,一個(gè)胖子當(dāng)著我的面吹牛轨香,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播幼东,決...
    沈念sama閱讀 41,221評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼臂容,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼科雳!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起策橘,我...
    開(kāi)封第一講書(shū)人閱讀 40,174評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤炸渡,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后丽已,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蚌堵,經(jīng)...
    沈念sama閱讀 46,699評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評(píng)論 3 343
  • 正文 我和宋清朗相戀三年沛婴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吼畏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,918評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嘁灯,死狀恐怖泻蚊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情丑婿,我是刑警寧澤性雄,帶...
    沈念sama閱讀 36,573評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站羹奉,受9級(jí)特大地震影響秒旋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜诀拭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評(píng)論 3 336
  • 文/蒙蒙 一蝗拿、第九天 我趴在偏房一處隱蔽的房頂上張望捺信。 院中可真熱鬧锯茄,春花似錦鹃彻、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,749評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至翰苫,卻和暖如春止邮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背革骨。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,862評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工农尖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人良哲。 一個(gè)月前我還...
    沈念sama閱讀 49,364評(píng)論 3 379
  • 正文 我出身青樓盛卡,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親筑凫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子滑沧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評(píng)論 2 361