01-C語言基本數(shù)據(jù)類型和控制流程
前言
- 希望你有Java基礎(chǔ)掉分,我會(huì)在文中大量采用Java語言進(jìn)行同類相比赴恨,以達(dá)到解釋目的晤郑。
- 學(xué)個(gè)NDK就要把整個(gè)C體系全部干一遍么负蚊?本著解決問題的態(tài)度,只介紹相關(guān)開發(fā)的東西浆兰,節(jié)約大家的時(shí)間磕仅。
- 本系列文章,并不能讓筆者成為專業(yè)領(lǐng)域開發(fā)工程師簸呈,要成為專業(yè)領(lǐng)域資深開發(fā)工程師榕订,需要更多的努力。
目標(biāo)
學(xué)習(xí)目標(biāo)如下:
- IDE初步解析
- 初步理解C與C++語言
- 運(yùn)算符優(yōu)先級
- 堆棧和內(nèi)存分配
- 寫一個(gè)在Visual Studio中的程序
材料準(zhǔn)備
IDE準(zhǔn)備
我們的目的是執(zhí)行NDK開發(fā)蜕便,所以我們的在IDE選擇的時(shí)候劫恒,原則上是是要是文本編譯工具都可以玩裙。當(dāng)然兼贸,易用性和開發(fā)效率也需要考慮的話吃溅,推薦使用
- VS系列(Visual Studio),推薦2013~2015决侈。Visual Studio 2013下載地址
VS社區(qū)版本是免費(fèi)的螺垢,需要下載C喧务,lunix的插件平臺(tái)支持枉圃。
NDK開發(fā)語言說明
NDK使用C和C++開發(fā)都可。
C與C++
- C面向過程孽亲,C++面向?qū)ο?/li>
- C是子集坎穿,C++是C的超集(C之上的擴(kuò)展,非父類的意思)
- 大部c語言程序都可以不加修改的拿到C++下使用
- C廣泛運(yùn)用與底層開發(fā)
- NDK開發(fā)直接使用C++即可
C中的基本數(shù)據(jù)類型
-
char/short/int/long/float/double/bool
可以說幾乎所有高級開發(fā)語言都有這些類型了返劲,使用定義如下玲昧,與java無異
int x = 10篮绿; long l = 100L;
關(guān)于這些類型的長度占用如下:
類型 | 長度/字節(jié) | 取值范圍 | 存儲(chǔ)方式 |
---|---|---|---|
char | 1 | -128~127 | 有符號(hào)二進(jìn)制補(bǔ)碼形式 |
[signed]char | 1 | -128~127 | |
unsigned char | 1 | 0~255 | |
short [int] | 2 | -32768~32767 | |
unsigned short [int] | 2 | 0~65535 | |
int | 4 | -2147483648~2147483647 | 定點(diǎn)有符號(hào)二進(jìn)制補(bǔ)碼形式 |
[signed] int | 4 | -2147483648~2147483647 | |
unsigned [int] | 4 | 0~4294967295 | |
long [int] | 4 | -2147483648~2147483647 | |
[signed] long [int] | 4 | -2147483648~2147483647 | |
unsigned long [int] | 4 | 0~4294967295 | 無符號(hào)(那就是正數(shù)啦) |
float | 4 | -3.4*10^38~3.410^38* | 浮點(diǎn)形式存儲(chǔ) |
double | 8 | -1.798*10^308~1.79810^308* | 浮點(diǎn)形式存儲(chǔ) |
long double | 8 | -1.798*10^308~1.79810^308* | |
long long | 8 |
注意尘应,以上長度占用都是32位系統(tǒng)的,如果是64位犬钢,占用如下:
上表中第一行的大寫字母和數(shù)字含義如下所示: 系統(tǒng)遵循的標(biāo)準(zhǔn)
l表示:int類型
L表示:long類型
P表示:pointer指針類型
32表示:32位系統(tǒng)
64表示64位系統(tǒng)
如:LP64表示鲸睛,在64位系統(tǒng)下的long類型和pointer類型長度為64位坡贺。
64位Linux 使用了 LP64 標(biāo)準(zhǔn) 官辈,即:long類型和pointer類型長度為64位
8個(gè)位1個(gè)字節(jié)遍坟,上圖中中的長度顯示的是位數(shù)。
我們大部分系統(tǒng)肺魁,比如win系統(tǒng)是lLP32隔节,LP64規(guī)則的。
C中的String
C中怎诫,是沒有“java字符串”的,在 C 語言中幻妓,字符串實(shí)際上是使用 null 字符 '\0' 終止的一維字符數(shù)組。因此强胰,一個(gè)以 null 結(jié)尾的字符串,包含了組成字符串的字符偶洋。
下面的聲明和初始化創(chuàng)建了一個(gè) "Hello" 字符串熟吏。由于在數(shù)組的末尾存儲(chǔ)了空字符玄窝,所以字符數(shù)組的大小比單詞 "Hello" 的字符數(shù)多一個(gè)。
char hello[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
通常我們進(jìn)行字符串定義的時(shí)候哆料,使用如下方法:
char hello[] = "Hello";
C中有大量操作字符串的函數(shù):
請?jiān)谑褂玫臅r(shí)候引入包string.h
序號(hào) | 函數(shù) & 目的 |
---|---|
1 | strcpy(s1, s2); 復(fù)制字符串 s2 到字符串 s1。 |
2 | strcat(s1, s2); 連接字符串 s2 到字符串 s1 的末尾杏节。 |
3 | strlen(s1); 返回字符串 s1 的長度典阵。 |
4 | strcmp(s1, s2); 如果 s1 和 s2 是相同的,則返回 0壮啊;如果 s1<s2 則返回小于 0;如果 s1>s2 則返回大于 0歹啼。 |
5 | strchr(s1, ch); 返回一個(gè)指針,指向字符串 s1 中字符 ch 的第一次出現(xiàn)的位置藤树。 |
6 | strstr(s1, s2); 返回一個(gè)指針拓萌,指向字符串 s1 中字符串 s2 的第一次出現(xiàn)的位置。 |
使用方式為:
#include <string.h>
/* 復(fù)制 str1 到 str3 */
strcpy(str3, str1);
printf("strcpy( str3, str1) : %s\n", str3);
/* 連接 str1 和 str2 */
strcat(str1, str2);
printf("strcat( str1, str2): %s\n", str1);
/* 連接后微王,str1 的總長度 */
len = strlen(str1);
printf("strlen(str1) : %d\n", len);
string部分內(nèi)容,摘取于菜鳥教程字符串
C中的數(shù)組
聲明數(shù)組的時(shí)候钧大,就需要聲明數(shù)組大小激才,且必須在編譯期間就定義额嘿。不能通過賦值等方式進(jìn)行定義劣挫。
// 方式1
int intArray[10];
// 方式2
int intArray[] = {1,2,3,4,5}
與Java一樣,必須將數(shù)組大小定義压固。當(dāng)然,寫法上與java有點(diǎn)不一樣帐我,這個(gè)需要注意。
至于前文提到的“且必須在編譯期間就定義”谣光,是為了避免如下寫法:
int n = 5;
int array[n]; // 編譯錯(cuò)誤芬为,必須直接定義
當(dāng)然,如果使用const關(guān)鍵字媚朦,可以改變局面
const int n = 5;
int array[n]; // n用了const修飾,此處變異就可以通過
至于const是什么孙乖,請見下文解釋份氧。
C中的一些方法介紹
-
const
C中的常量修飾符唯袄,類似于java中的final字段半火。
定義為const的變量其內(nèi)存值是無法被改變的季俩。其用法如下:
const int x = 5;
由于變量的內(nèi)存值無法改變店归,這也是可以解釋為何數(shù)組長度可以用const修飾過的變量來定義了酪我。因?yàn)槿绻皇莄onst的,其值是會(huì)被任意改變的(被指針或者什么改變)都哭,導(dǎo)致違反了數(shù)組本身定義的原則逞带。
-
sizeof
計(jì)算基本類型數(shù)據(jù)所占用的內(nèi)存大猩葱隆(注意,是類型遇汞,不是變量。空入。族檬。。)单料。
由于每個(gè)系統(tǒng)遵循的制式不一樣,有l(wèi)LP32递鹉,LP64藏斩,LLP64以及l(fā)LP64,基本變量在這些系統(tǒng)上跑狰域,占用大小多少都有一些差池,所以我們在系統(tǒng)中需要對其進(jìn)行sizeof兆览。
由于此方法大量運(yùn)用在內(nèi)存地址的動(dòng)態(tài)分配上。
定義如下:
int x = sizeof(object);
使用如下
int x = 10; int y = sizeof(x); // 可以對變量進(jìn)行sizeof子巾,得出變量類型的真實(shí)占用大小 int y1 = sizeof(int); // 可以直接對類型進(jìn)行sizeof
-
printf
控制臺(tái)格式化打印輸出小压,等于Java中的 String.format("%d",10)。
控制臺(tái)輸出只用這一個(gè)就可以了怠益,其他的都可以忽略。由于本文是非專業(yè)文章烤咧,其他的不介紹。
學(xué)生問一個(gè)生物教授:“野外考察的時(shí)候煮嫌,如果遇到不認(rèn)識(shí)的植物,恰好又有學(xué)生問你揪罕,你怎么化解尷尬宝泵?”
“一般不會(huì)有,因?yàn)槲易咴谇懊娑蹋瑫?huì)把自己不認(rèn)識(shí)的花草全部踩死∫祝”瓤鼻。
格式如下:
printf("格式化字符串",輸出表列)
使用如下:
printf("%d\n",1000); // 輸出數(shù)字1000
關(guān)于其他數(shù)據(jù)輸出格式如下:
字符 對應(yīng)數(shù)據(jù)類型 含義 示例 d/i int 輸出十進(jìn)制有符號(hào)32bits整數(shù),i是老式寫法 printf("%i",123);
輸出123o unsigned int 無符號(hào)8進(jìn)制(octal)整數(shù)(不輸出前綴0) printf("0%o",123);
輸出0173u unsigned int 無符號(hào)10進(jìn)制整數(shù) printf("%u",123);
輸出123x/X unsigned int 無符號(hào)16進(jìn)制整數(shù)茬祷,x對應(yīng)的是abcdef,X對應(yīng)的是ABCDEF(不輸出前綴0x) printf("0x%x 0x%X",123,123);
輸出0x7b 0x7Bf/lf float(double) 單精度浮點(diǎn)數(shù)用f,雙精度浮點(diǎn)數(shù)用lf(printf可混用秸妥,但scanf不能混用) printf("%.9f %.9lf",0.000000123,0.000000123);
輸出0.000000123 0.000000123沃粗。注意指定精度,否則printf默認(rèn)精確到小數(shù)點(diǎn)后六位F float(double) 與f格式相同最盅,只不過 infinity 和 nan 輸出為大寫形式。 例如 printf("%f %F %f %F\n",INFINITY,INFINITY,NAN,NAN);
輸出結(jié)果為inf INF nan NAN
e/E float(double) 科學(xué)計(jì)數(shù)法挂签,使用指數(shù)(Exponent)表示浮點(diǎn)數(shù)盼产,此處”e”的大小寫代表在輸出時(shí)“e”的大小寫 printf("%e %E",0.000000123,0.000000123);
輸出1.230000e-07 1.230000E-07g float(double) 根據(jù)數(shù)值的長度勺馆,選擇以最短的方式輸出侨核,%f或%e printf("%g %g",0.000000123,0.123);
輸出1.23e-07 0.123G float(double) 根據(jù)數(shù)值的長度灌灾,選擇以最短的方式輸出,%f或%E printf("%G %G",0.000000123,0.123);
輸出1.23E-07 0.123c char 字符型锋喜。可以把輸入的數(shù)字按照ASCII碼相應(yīng)轉(zhuǎn)換為對應(yīng)的字符 printf("%c\n",64)
輸出As char* 字符串段标。輸出字符串中的字符直至字符串中的空字符(字符串以空字符’\0‘結(jié)尾) printf("%s","測試test");
輸出:測試testS wchar_t* 寬字符串炉奴。輸出字符串中的字符直至字符串中的空字符(寬字符串以兩個(gè)空字符’\0‘結(jié)尾) setlocale(LC_ALL,"zh_CN.UTF-8");
wchar_t wtest[]=L"測試Test";
printf("%S\n",wtest);
輸出:測試testp void* 以16進(jìn)制形式輸出指針 printf("%010p","lvlv");
輸出:0x004007e6n int* 什么也不輸出。%n對應(yīng)的參數(shù)是一個(gè)指向signed int的指針瞻赶,在此之前輸出的字符數(shù)將存儲(chǔ)到指針?biāo)傅奈恢?/td> int num=0;
printf("lvlv%n",&num);
printf("num:%d",num);
輸出:lvlvnum:4% 字符% 輸出字符‘%’(百分號(hào))本身 printf("%%");
輸出:%m 無 打印errno值對應(yīng)的出錯(cuò)內(nèi)容 printf("%m\n");
a/A float(double) 十六進(jìn)制p計(jì)數(shù)法輸出浮點(diǎn)數(shù)砸逊,a為小寫,A為大寫 printf("%a %A",15.15,15.15);
輸出:0x1.e4ccccccccccdp+3 0X1.E4CCCCCCCCCCDP+3 -
include
include方法师逸,可以理解為java中的import方法。
include方法寫在文件頭的对湃,有兩種格式
#include <stdio.h> // 系統(tǒng)指定路徑遗淳,通常c中的預(yù)制方法拍柒,導(dǎo)入頭文件等啥的用這個(gè) #include "a.h" // 用戶自定義相對路徑屈暗,通常自己寫的文件就這么玩兒
一個(gè)是尖括號(hào),一個(gè)是冒號(hào)种呐。注意看注釋區(qū)分區(qū)別
-
system("pause")
system()就是調(diào)用(DOS)系統(tǒng)命令(和shell命令)弃甥。
pause代表暫停一下。這里介紹這個(gè)的原因淆攻,時(shí)候我們在寫一些例子的時(shí)候嘿架,需要暫停一下系統(tǒng)執(zhí)行啸箫,才能看到執(zhí)行結(jié)果。達(dá)到演示的效果蝉娜。
system("pause")扎唾,讓操作系統(tǒng)來暫停該程序進(jìn)程的執(zhí)行,同時(shí)程序運(yùn)行到此語句處時(shí)稽屏,會(huì)在程序的窗口上顯示“Press any key to continue . . .” 也就是 “按任意鍵繼續(xù)...”,即等待用戶按下任意一個(gè)按鍵使該程序從暫停狀態(tài)返回到執(zhí)行狀態(tài)繼續(xù)從剛才暫停的地方開始執(zhí)行坛增。
在使用system(“pause”)的時(shí)候薄腻,需要include包stdlib.h。
#include <stdlib.h> system("pause");
談?wù)勔恍└拍睿憾褩Ec內(nèi)存分配
-
堆棧與內(nèi)存分配
-
什么是“堆”庵楷,什么是“棧”咐蚯,以java角度來談
我要偏個(gè)題弄贿,要談下“靜態(tài)”。
靜態(tài)存儲(chǔ)區(qū):
- 內(nèi)存在程序編譯的時(shí)候就分配好的區(qū)域差凹,程序在整個(gè)運(yùn)行中都存在。主要存放:靜態(tài)呐萌,全局的static數(shù)據(jù)和常量谊娇。(static 為java中“靜態(tài)”標(biāo)志)
棧:
- 一種先進(jìn)后出的結(jié)構(gòu)
- 棧使用的是CPU一級緩存
- "棧"的運(yùn)算速度非常快,應(yīng)為它是放在處理器中的攀例,由于在CPU里面也導(dǎo)致它容量有限
- 在執(zhí)行函數(shù)(方法)時(shí)顾腊,函數(shù)的一些局部變量的存儲(chǔ)都是放在棧上的挖胃,函數(shù)結(jié)束的時(shí)候,這些存儲(chǔ)單元會(huì)被清除掉酱鸭。
- 內(nèi)存分配策略是:連續(xù)內(nèi)存分配(如在類中定義的arrayList,先分配個(gè)255烁登,不夠再連著分配一個(gè)255*2 的連續(xù)空間)蔚舀。
- java中,方法變量是放在棧中的
堆:
碎片式內(nèi)存分配狼牺,不連續(xù):
-
不夠用臨時(shí)申請
也叫動(dòng)態(tài)內(nèi)存分配(又例如早方法中定義ArrayList礼患,先分配255,后續(xù)不夠缅叠,在在其他非連續(xù)的地方分配個(gè)內(nèi)存),有時(shí)候可以用malloc 或者 new 來申請分配一個(gè)內(nèi)存弹囚。C/C++中需要手工釋放狼犯,java中是GC自動(dòng)釋放。
雖然java不用管內(nèi)存回收悯森,這是方便,但在一個(gè)側(cè)面看來祝蝠,其內(nèi)存管理可以說是不受控的!
堆是存放在二級緩存中
-
java中绎狭,類屬性變量是在放在堆中的
——java,乃至android開發(fā)的內(nèi)存管理就主要講“堆”的處理儡嘶。
-
“堆”與“棧”的區(qū)別
-
連續(xù)內(nèi)存與非連續(xù)內(nèi)存
- “堆”是不連續(xù)的內(nèi)存區(qū)誓篱,空間相對比較靈活凯楔。
- “棧”是連續(xù)的內(nèi)存區(qū)摆屯,大小是操作系統(tǒng)控制的。
- “堆”因?yàn)閮?nèi)存不是連續(xù)的(與“椬佳椋”區(qū)別)富弦,導(dǎo)致“堆”是有碎片化的,碎片化的管理(讀取等)就是效率相對棧低的一個(gè)原因腕柜。
- "棧"盏缤,是先進(jìn)后出,切內(nèi)存的分配是連續(xù)的唉铜,完全不會(huì)產(chǎn)生碎片。
-
緩存級別
- 棧使用的是一級緩存
- 堆是存放在二級緩存中
-
管理級別
- “椌和铮”是操作系統(tǒng)管理
- “堆”大多是可以開放給程序管理的灰嫉,也就是程序員可以通過代碼進(jìn)行主動(dòng)管理
-
-
一些實(shí)踐
- class中的成員變量、對象讼撒,是放在“堆”中的股耽。
- class 中的 函數(shù)方法中的變量钳幅、對象,則就是放在“椢芷颍”中的盖矫。
- 對象引用是放在“堆”中的击奶。不管這個(gè)引用在class中,還是在函數(shù)中柜砾,都是!Vぐ拧担映!
-
C中的內(nèi)存分配
C跟java不一樣,java的內(nèi)存管理是自動(dòng)的蝇完,C不是摧阅。
這里的內(nèi)存管理浇辜,主要講的就是堆內(nèi)存管理。
棧內(nèi)存很小孙援,C里面可能就幾M扇雕,如果分配一個(gè)40M大小的數(shù)組洼裤,用棧就爆缸了。所以需要在堆中分配莹菱。也引出我們以下幾個(gè)方法:
以下方法需求引入stdlib.h聲明吱瘩,一般IDE(VasulStudio)默認(rèn)在新建工程的時(shí)候都會(huì)導(dǎo)入
-
malloc與memset
malloc:動(dòng)態(tài)申請堆內(nèi)存空間
memset:初始化動(dòng)態(tài)申請的內(nèi)存空間使碾,防止malloc申請的內(nèi)存地址原本是有值得。
// 當(dāng)數(shù)據(jù)無法確定 或者 比較龐大 需要使用動(dòng)態(tài)內(nèi)存申請 在堆中 // 這里的di1前的*號(hào)寫法票摇,是代表的“指針”,這里死記硬背即可盆色。這里用了一個(gè)int指針指向了這個(gè)1M大小的int類型空間祟剔。 int *di1 = (int*)malloc(1 * 1024 * 1024); // 動(dòng)態(tài)申請內(nèi)存應(yīng)該緊跟 memset 初始化內(nèi)存 // 將di1指向的內(nèi)存地址初始化(設(shè)置為0),且初始化的大小為1*1024*1024 memset(di1, NULL, 1 * 1024 * 1024);
-
calloc
malloc+memset方法一起做了物延。
// 申請40個(gè)字節(jié)的內(nèi)存(10*4=40叛薯,sizeof(int)是4),并將內(nèi)存初始化為 null int *di2 = (int*)calloc(10, sizeof(int));
-
relloc
動(dòng)態(tài)擴(kuò)容堆內(nèi)存空間案训。注意,只能擴(kuò)大忿项,不能縮谐俏琛!<叶帷拉馋!
// 對malloc申請的內(nèi)存進(jìn)行大小的調(diào)整 realloc(di1, 20 * sizeof(int)); // 將di1地址惨好,調(diào)整到20*4=80個(gè)字節(jié)堆內(nèi)存
-
alloc
棧內(nèi)存分配随闺,一般不用。我這里就不介紹了矩乐。
int *p = (int *)alloca(sizeof(int) * 10); // 由于是“棧內(nèi)存”,所以根本不用考慮釋放的事情
-
free以及制空
動(dòng)態(tài)分配的內(nèi)存回收掉分歇。
//標(biāo)準(zhǔn)寫法為: int *di1 = (int*)malloc(1*1024*1024); if (di1) { // 判斷 free(di1); // 釋放 di1 = NULL; // 制空:正常寫NULL欧漱,但是C中,0也是NULL繁调,寫0也可靶草。建議寫NULL }
請注意岳遥,釋放是三個(gè)個(gè)動(dòng)作,一個(gè)判斷浩蓉,一個(gè)free捻艳,一個(gè)制空。
-
-
控制流程
for
if
switch
while
break
continue
-
goto
這玩意不太好玩
除了goto认轨,其他都跟java一樣。不多講了恩急。
談?wù)勔?二/三目運(yùn)算符
如下表所示:
函數(shù)的調(diào)用與“聲明”
C++程序調(diào)用函數(shù)纪蜒,有點(diǎn)像腳本語言編程,如果方法在函數(shù)調(diào)用后定義随珠,會(huì)編譯報(bào)錯(cuò),所以這里有一個(gè)概念叫做“聲明”窗看,也就是 .h文件,他能解決這個(gè)問題举娩。
-
初識(shí) .h 頭文件
-
什么是 .h 文件构罗?什么又是 .cpp文件呢?
.cpp文件:源文件芙代,代碼邏輯的具體實(shí)現(xiàn)是在這個(gè)文件中實(shí)現(xiàn)的盖彭。
.h文件:就是一個(gè)“聲明”,里面有各種變量定義铺呵,以及方法定義隧熙,關(guān)于方法定義可以放在子類自行實(shí)現(xiàn),也可以在.h文件中自行實(shí)現(xiàn)贞盯,
兩者之間的關(guān)系:.cpp文件include .h文件音念,使用/實(shí)現(xiàn).h文件中的“聲明定義”,規(guī)范代碼躏敢,標(biāo)準(zhǔn)闷愤。
這很像java中的interface接口定義。
我們在使用一些方法變量的時(shí)候件余,比如使用malloc讥脐,或是system("pause")的時(shí)候,需要include <XXXX.h>文件蛾扇,“規(guī)范”就是這個(gè)道理攘烛。
-
-
聲明的兩種方式
-
方式1:類中先“聲明”這個(gè)方法:也就是在使用前聲明這個(gè)方法
int function(); void main(){ function(); } int function(){ // 方法實(shí)現(xiàn) }
-
方式2:寫一個(gè) .h的聲明頭文件,再include到cpp文件中(推薦此方法)
請見include章節(jié)描述
-
用VS寫一個(gè)程式
講了那么多镀首,還是要玩一下的坟漱,這里就寫一個(gè)指針程序吧,為下一篇文章做鋪墊
- 寫一個(gè)程序
- 多少用上點(diǎn)我們之前講的內(nèi)容
- 指針
新建程序
文件 --> 新建 -->項(xiàng)目
選擇Visual C++芋齿,選中Win32控制臺(tái)應(yīng)用程序腥寇。
編寫代碼與執(zhí)行程序
include <stdio.h>
include <tchar.h>
include <stdlib.h>
int _tmain(int argc, _TCHAR* argv[])
{
// 變量,指針
int x = 10;
int *p = &x;
// N目運(yùn)算符
printf("%p \n",p); // 打印十六進(jìn)制內(nèi)存地址
int y = *p++;
printf("%d \n",y);
y = (*p)++;
printf("%d \n",y);
if (!y || y < 0 ){
printf("不靠譜啊兄弟觅捆,y為%u \n",y);
}
// 命令框暫停
system("pause");
p = 0;
return 0;
}
程序?qū)懲晟庖郏x好調(diào)試模式(release還是debug),選擇“本地windows調(diào)試器”
程序返回結(jié)果為
0045FB74
10
-858993460 // 走到一個(gè)不知道什么值的內(nèi)存上了
不靠譜啊兄弟栅炒,y為-858993460
對于里面的什么 *p啥的掂摔,目前看看就好,下一篇博文會(huì)講解赢赊。
斷點(diǎn)
與Eclipse乙漓,AndroidStudio等IDE一樣,對應(yīng)行數(shù)左邊的列上點(diǎn)擊即可释移。程序運(yùn)行到了過后叭披,是自動(dòng)暫停的。
內(nèi)存查找
在調(diào)試模式下玩讳,在斷點(diǎn)生效的情況下涩蜘,可以打開“內(nèi)存”窗口。
斷點(diǎn)的時(shí)候熏纯,可以在“調(diào)試”--“窗口”--“內(nèi)存”--選擇內(nèi)存1/2/3/4進(jìn)行查看同诫。數(shù)據(jù)查看需求調(diào)整到對應(yīng)字節(jié),并帶符號(hào)顯示
根據(jù)我們打印的內(nèi)存值豆巨,可以在這個(gè)窗口中找到對應(yīng)的值
如上圖剩辟,根據(jù)數(shù)據(jù)類型,右鍵選擇一些配置參數(shù)往扔,可以看到對應(yīng)的值。
學(xué)習(xí)目標(biāo)小結(jié)
學(xué)習(xí)目標(biāo)如下:
- [x] IDE初步解析
- [x] 初步理解C與C++語言
- [x] 運(yùn)算符優(yōu)先級
- [x] 堆棧和內(nèi)存分配
- [x] 寫一個(gè)在Visual Studio中的程序