最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于c語(yǔ)言知識(shí)點(diǎn)的補(bǔ)遺介紹

 更新時(shí)間:2013年05月23日 15:48:18   作者:  
本篇文章是對(duì)c語(yǔ)言知識(shí)點(diǎn)的一些補(bǔ)遺進(jìn)行詳細(xì)的分析介紹,需要的朋友參考下

使用C很長(zhǎng)時(shí)間,但是很難說(shuō)對(duì)c的各個(gè)點(diǎn)都十分的透徹。雖然c不像c++那樣復(fù)雜,但是還有很多嘰里旮旯兒:并不是他們有多難,而是在于他們平時(shí)用的不多,或者和人的第一直覺(jué)相悖,再或者初學(xué)時(shí)經(jīng)驗(yàn)有限理解不深根本沒(méi)有記住。
下面的這些東西可能來(lái)自《c專(zhuān)家編程》或者網(wǎng)絡(luò)。最近發(fā)現(xiàn)基礎(chǔ)的經(jīng)典的書(shū)籍常讀常新,原因可能有兩個(gè):
1、隨著自己經(jīng)驗(yàn)的增長(zhǎng),你的認(rèn)識(shí)可能會(huì)不一樣,思維的方式也會(huì)有所變化,而得到的東西自然會(huì)是新的東西。
2、早些時(shí)候經(jīng)驗(yàn)有限,有些點(diǎn)可能根本就沒(méi)有完全理解?,F(xiàn)在你可以理解的更深刻。
這方面的書(shū)籍再比如《代碼大全》,前幾天翻了一下,又有不同的認(rèn)識(shí)。
進(jìn)入正題:
1、有符號(hào)和無(wú)符號(hào)的比較:
printf("%d\n", sizeof('A')):打印的值是4(或者是int的長(zhǎng)度)而不是1。因?yàn)閏有類(lèi)型提升,它會(huì)首先把'A'提升為int類(lèi)型,然后在傳給sizeof。表達(dá)式中的參數(shù)會(huì)提升為int或者double,然后在進(jìn)行運(yùn)算,之后再進(jìn)行裁剪,獲得指定類(lèi)型的值。
if (-1 <= sizeof(int)):sizeof的返回值是unsigned int,-1會(huì)被類(lèi)型轉(zhuǎn)換為unsignedint,然后在進(jìn)行比較。。
這里涉及到的是類(lèi)型提升,隱式類(lèi)型轉(zhuǎn)換。它會(huì)在表達(dá)式中發(fā)生,也會(huì)在函數(shù)入?yún)⒅邪l(fā)生。
2、枚舉在內(nèi)存中的大?。赫妓膫€(gè)字節(jié)。
3、局部變量也是字節(jié)對(duì)齊的:
        E_T g;
        E_T f;
        E_T e = false;
        char c1;
        char c2;
        int i1;
        char c3;
        int i2;
printf("%p, %p, %p, %p, %p, %p, %p, %p\n", &g, &f, &e, &c1, &c2, &i1, &c3, &i2);



--表示是補(bǔ)齊的位。
4、宏定義中的#和##:#的功能是將其后面的宏參數(shù)進(jìn)行字符串化操作(Stringfication),簡(jiǎn)單說(shuō)就是在對(duì)它所引用的宏變量通過(guò)替換后在其左右各加上一個(gè)雙引號(hào)。
而##被稱(chēng)為連接符(concatenator),用來(lái)將兩個(gè)Token連接為一個(gè)Token。
5、浮點(diǎn)數(shù)不可以用等于比較。
6、void foobar2() 表示函數(shù)入?yún)€(gè)數(shù)有多個(gè),不確定。如果表示沒(méi)有產(chǎn)生,應(yīng)該是:void foobar2(void)
7、全局變量會(huì)被初始化為0,但是,棧中的局部變量不會(huì)被初始化。
8、inline函數(shù)和宏:內(nèi)聯(lián)函數(shù)是真正的函數(shù),但是它是在編譯期的優(yōu)化。
9、    int a[5];    printf("%x\n", a);    printf("%x\n", a+1);    printf("%x\n", &a);    printf("%x\n", &a+1);
最后一個(gè),&a+1,&a表示數(shù)組,所以,應(yīng)該是增加數(shù)組大?。?*5個(gè)字節(jié)。
10、10U表示一個(gè)無(wú)符號(hào)類(lèi)型的數(shù)字10.
11、移位運(yùn)算的優(yōu)先級(jí)比較低,低于四則運(yùn)算。
12、左移n位,相當(dāng)于乘與2的n次方。右移相當(dāng)于處于2的n次方。
13、指針和數(shù)組:
1)、void fun(char buf[100])
{
printf("%d, \n", sizeof(buf));
}
打印的值是4,而不是100。
2)、在一個(gè)文件中char p[10] = "";
在另外一個(gè)文件中聲明:extern char *p;
然后,在聲明的文件中sizeof(p),答案是4。也就是,sizeof計(jì)算的是聲明的類(lèi)型。
3)對(duì)于編譯器而言,一個(gè)數(shù)組就是一個(gè)地址,一個(gè)指針就是一個(gè)地址的地址。
4)所有作為函數(shù)參數(shù)的數(shù)組名編譯器都會(huì)轉(zhuǎn)換為指針,在其他所有的情況下,數(shù)組的聲明就是數(shù)組,指針的什么就是指針。
數(shù)組和指針相同情況的規(guī)則:
1、表達(dá)式中的數(shù)組名(與聲明不同)被編譯器當(dāng)作一個(gè)指向該數(shù)組的第一個(gè)元素的指針。
2、下標(biāo)總是與指針的偏移量相同。
3、在函數(shù)的聲明中,數(shù)組名被編譯器當(dāng)作指向該數(shù)組第一個(gè)元素的指針。這個(gè)操作時(shí)編譯器完成的。原因是出于效率的考慮。因?yàn)檫@樣就是引用傳遞而非值傳遞。值 傳遞需要拷貝。這也可以看的出sizeof是在匯編中操作的。
arry[-1]的行為是未定義的。
總結(jié):
1)a[i]這樣的形式對(duì)a進(jìn)行訪(fǎng)問(wèn),總是被編譯器改寫(xiě)為像*(a+i)的形式。
2)指針始終是指針,你不可以把它改寫(xiě)成數(shù)組,但是可以通過(guò)數(shù)組的形式訪(fǎng)問(wèn)。
3)數(shù)組作為函數(shù)的參數(shù),會(huì)被編譯器改寫(xiě)成指針。
4)指針和數(shù)組的什么必須配對(duì)。
14、聲明與定義:聲明可以由多個(gè),定義只有一個(gè)。定義是特殊的聲明,它為對(duì)象分配了內(nèi)存。而聲明時(shí)普通的聲明,描述其他地方創(chuàng)建的對(duì)象。
聲明的優(yōu)先級(jí)規(guī)則:
a:從他的名字開(kāi)始按照優(yōu)先次序依次讀取:
b:優(yōu)先級(jí)的高低:
1、聲明中被括號(hào)括起來(lái)的那部分。
2、后綴操作符:
括號(hào)()表示是一個(gè)函數(shù);
方括號(hào)[]表示是一個(gè)數(shù)組;
3、前綴操作符:*表示指向什么的指針;
4、const緊跟變量則修飾變量不可修改,緊跟類(lèi)型則指向的東西不可修改。
15、多維數(shù)組:
a[2][3]:a是一個(gè)數(shù)組,有兩個(gè)元素。每個(gè)元素又是一個(gè)數(shù)組,有三個(gè)元素。
內(nèi)存布局:a[0][0],a[0][1],a[0][2],a[1][0]...地址一直變大。
多維數(shù)組,數(shù)組的數(shù)組作為函數(shù)的形參,會(huì)被轉(zhuǎn)化為數(shù)組指針,數(shù)組的指針,也是行指針。本質(zhì)上也是指針。
16、結(jié)構(gòu)體默認(rèn)的字節(jié)對(duì)齊一般滿(mǎn)足三個(gè)準(zhǔn)則:
1) 結(jié)構(gòu)體變量的首地址能夠被其最寬基本類(lèi)型成員的大小所整除;
2) 結(jié)構(gòu)體每個(gè)成員相對(duì)于結(jié)構(gòu)體首地址的偏移量(offset)都是成員自身大小的整數(shù)倍,如有需要編譯器會(huì)在成員之間加上填充字節(jié)(internal adding);
3) 結(jié)構(gòu)體的總大小為結(jié)構(gòu)體最寬基本類(lèi)型成員大小的整數(shù)倍,如有需要編譯器會(huì)在最末一個(gè)成員之后加上填充字節(jié)(trailing padding)。

相關(guān)文章

  • OpenCV實(shí)現(xiàn)輪廓的發(fā)現(xiàn)

    OpenCV實(shí)現(xiàn)輪廓的發(fā)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了OpenCV如何實(shí)現(xiàn)輪廓的發(fā)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • 利用Qt制作簡(jiǎn)單的日期選擇界面

    利用Qt制作簡(jiǎn)單的日期選擇界面

    Qt自帶的日期選擇控件過(guò)于丑陋與難用,所以但凡有點(diǎn)小想法的人都會(huì)做一個(gè)全新的日歷。這篇文章就來(lái)利用Qt制作一個(gè)簡(jiǎn)單的日期選擇界面,感興趣的可以了解一下
    2023-03-03
  • 基于WTL中使用雙緩沖避免閃爍的解決方法

    基于WTL中使用雙緩沖避免閃爍的解決方法

    本篇文章是對(duì)WTL中使用雙緩沖避免閃爍的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++實(shí)現(xiàn)和電腦對(duì)戰(zhàn)三子棋實(shí)例

    C++實(shí)現(xiàn)和電腦對(duì)戰(zhàn)三子棋實(shí)例

    大家好,本篇文章主要講的是C++實(shí)現(xiàn)和電腦對(duì)戰(zhàn)三子棋實(shí)例,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下
    2022-01-01
  • C語(yǔ)言設(shè)計(jì)前中后隊(duì)列實(shí)例代碼

    C語(yǔ)言設(shè)計(jì)前中后隊(duì)列實(shí)例代碼

    隊(duì)列最主要的作用就是用來(lái)管理數(shù)據(jù)流的,防止數(shù)據(jù)因?yàn)閭鬏旑l率過(guò)快得不到及時(shí)處理而丟失,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言設(shè)計(jì)前中后隊(duì)列的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • 實(shí)例代碼分析c++動(dòng)態(tài)分配

    實(shí)例代碼分析c++動(dòng)態(tài)分配

    這篇文章主要介紹了c++動(dòng)態(tài)分配的的相關(guān)資料,文中代碼簡(jiǎn)單易懂,方便大家更好的學(xué)習(xí)參考,感興趣的朋友可以了解下
    2020-06-06
  • C語(yǔ)言的sleep、usleep、nanosleep等休眠函數(shù)的使用

    C語(yǔ)言的sleep、usleep、nanosleep等休眠函數(shù)的使用

    本文主要介紹了C語(yǔ)言的sleep、usleep、nanosleep等休眠函數(shù)的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 成員函數(shù)的重載、覆蓋與隱藏詳細(xì)解析

    成員函數(shù)的重載、覆蓋與隱藏詳細(xì)解析

    成員函數(shù)的重載、覆蓋(override)與隱藏很容易混淆,C++程序員必須要搞清楚概念,否則錯(cuò)誤將防不勝防
    2013-10-10
  • MFC修改編輯框光標(biāo)顯示位置方法詳解

    MFC修改編輯框光標(biāo)顯示位置方法詳解

    這篇文章主要介紹了在MFC中利用CComboBox控件修改編輯框光標(biāo)顯示位置的兩種解決方法,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-02-02
  • C++實(shí)現(xiàn)四則混合運(yùn)算計(jì)算器

    C++實(shí)現(xiàn)四則混合運(yùn)算計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)四則混合運(yùn)算計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11

最新評(píng)論

库尔勒市| 平阴县| 新田县| 阳东县| 阳朔县| 瑞昌市| 张家港市| 米泉市| 旬邑县| 南雄市| 贺州市| 东阳市| 广宗县| 黎城县| 普宁市| 滨州市| 华亭县| 灵山县| 通许县| 陈巴尔虎旗| 诏安县| 庆阳市| 昌江| 嫩江县| 吉木萨尔县| 嵊州市| 永川市| 安顺市| 江达县| 宁陕县| 大连市| 法库县| 当涂县| 图们市| 平顺县| 黔西| 靖江市| 英山县| 襄汾县| 航空| 临夏市|