01 - C語言基本數(shù)據(jù)類型和控制流程

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社區(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位犬钢,占用如下:

image

上表中第一行的大寫字母和數(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);輸出123
    o unsigned int 無符號(hào)8進(jìn)制(octal)整數(shù)(不輸出前綴0) printf("0%o",123);輸出0173
    u unsigned int 無符號(hào)10進(jìn)制整數(shù) printf("%u",123);輸出123
    x/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 0x7B
    f/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-07
    g float(double) 根據(jù)數(shù)值的長度勺馆,選擇以最短的方式輸出侨核,%f或%e printf("%g %g",0.000000123,0.123);輸出1.23e-07 0.123
    G float(double) 根據(jù)數(shù)值的長度灌灾,選擇以最短的方式輸出,%f或%E printf("%G %G",0.000000123,0.123);輸出1.23E-07 0.123
    c char 字符型锋喜。可以把輸入的數(shù)字按照ASCII碼相應(yīng)轉(zhuǎn)換為對應(yīng)的字符 printf("%c\n",64)輸出A
    s char* 字符串段标。輸出字符串中的字符直至字符串中的空字符(字符串以空字符’\0‘結(jié)尾) printf("%s","測試test");輸出:測試test
    S wchar_t* 寬字符串炉奴。輸出字符串中的字符直至字符串中的空字符(寬字符串以兩個(gè)空字符’\0‘結(jié)尾) setlocale(LC_ALL,"zh_CN.UTF-8"); wchar_t wtest[]=L"測試Test"; printf("%S\n",wtest); 輸出:測試test
    p void* 以16進(jìn)制形式輸出指針 printf("%010p","lvlv");輸出:0x004007e6
    n 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)算符

如下表所示:

image

函數(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)目

image

選擇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)暫停的。

image

內(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)的值

image

如上圖剩辟,根據(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中的程序
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末熊户,一起剝皮案震驚了整個(gè)濱河市萍膛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嚷堡,老刑警劉巖蝗罗,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蝌戒,居然都是意外死亡串塑,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門北苟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桩匪,“玉大人,你說我怎么就攤上這事友鼻∩店迹” “怎么了闺骚?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長妆档。 經(jīng)常有香客問我僻爽,道長,這世上最難降的妖魔是什么贾惦? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任胸梆,我火速辦了婚禮,結(jié)果婚禮上须板,老公的妹妹穿的比我還像新娘碰镜。我一直安慰自己,他們只是感情好逼纸,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布洋措。 她就那樣靜靜地躺著,像睡著了一般杰刽。 火紅的嫁衣襯著肌膚如雪菠发。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天贺嫂,我揣著相機(jī)與錄音滓鸠,去河邊找鬼。 笑死第喳,一個(gè)胖子當(dāng)著我的面吹牛糜俗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播曲饱,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼悠抹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了扩淀?” 一聲冷哼從身側(cè)響起楔敌,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎驻谆,沒想到半個(gè)月后卵凑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡胜臊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年勺卢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片象对。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡黑忱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情杨何,我是刑警寧澤酱塔,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站危虱,受9級特大地震影響羊娃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜埃跷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一蕊玷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧弥雹,春花似錦垃帅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至厕吉,卻和暖如春酱固,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背头朱。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工运悲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人项钮。 一個(gè)月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓班眯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親烁巫。 傳聞我的和親對象是個(gè)殘疾皇子署隘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容