成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

C語(yǔ)言:指針習(xí)題

番茄西紅柿 / 3321人閱讀

摘要:目錄前言題目題目題目題目前言在學(xué)習(xí)完語(yǔ)言的初階以及進(jìn)階以后我們需要一些習(xí)題來(lái)檢驗(yàn)自己的學(xué)習(xí)成果下面將以一些筆試題和面試題來(lái)分析。在題目的分析中如有錯(cuò)誤歡迎指正。

前言

在學(xué)習(xí)完C語(yǔ)言的初階以及進(jìn)階以后,我們需要一些習(xí)題來(lái)檢驗(yàn)自己的學(xué)習(xí)成果,下面將以一些筆試題和面試題來(lái)分析。
在題目的分析中如有錯(cuò)誤,歡迎指正。

題目

題目1

int main() {	char arr[] = { 'a','b','c','d','e','f' };	printf("%d/n", sizeof(arr));//6	printf("%d/n", sizeof(arr + 0));//4/8	printf("%d/n", sizeof(*arr));//1	printf("%d/n", sizeof(arr[1]));//1	printf("%d/n", sizeof(&arr));//4/8	printf("%d/n", sizeof(&arr + 1));//4/8	printf("%d/n", sizeof(&arr[0] + 1));//4/8	//strlen函數(shù)輸入地址,找到0為止	printf("%d/n", strlen(arr));//隨機(jī)值b	printf("%d/n", strlen(arr + 0));//隨機(jī)值b	printf("%d/n", strlen(*arr));//錯(cuò)誤	printf("%d/n", strlen(arr[1]));//錯(cuò)誤	printf("%d/n", strlen(&arr));//隨機(jī)值b	printf("%d/n", strlen(&arr + 1));//隨機(jī)值b-6	printf("%d/n", strlen(&arr[0] + 1));//隨機(jī)值b-1	return 0;}

sizeof是一個(gè)操作符,strlen是C語(yǔ)言庫(kù)函數(shù),接受的是一個(gè)地址

在前面我們知道數(shù)組名代表首元素地址,但是有例外,例如sizeof和數(shù)組直接使用時(shí),這時(shí)候數(shù)組名代表整個(gè)數(shù)組。
經(jīng)過(guò)我們分析可以知道

  1. arr直接使用代表整個(gè)數(shù)組,sizeof(arr)的值是6;
  2. arr+0是一個(gè)地址,所以sizeof(arr+0)的值是4或8,具體答案取決32或64平臺(tái)
  3. *arr是首元素a的引用,所以sizeof(*arr)的值是1;
  4. arr[0]也是首元素a,與上面相同,它的值也是1;
  5. &arr是一個(gè)地址,所以它的值是4或者8;
  6. &arr+1是一個(gè)地址,所以它的值是4或者8;
  7. &arr[0]+1也是一個(gè)地址,所以它的地址是4或者8;

具體答案是不是我們分析的那樣,用VS2019編譯器進(jìn)行驗(yàn)證

接下來(lái)分析strlen函數(shù)
我們知道strlen接受字符串地址,然后往后找到/0結(jié)束
但是我們?cè)陬}目中初始化時(shí)沒(méi)有給’/0’,這樣就會(huì)造成他會(huì)一直往后走找到結(jié)束標(biāo)志’/0’。

  1. arr是首元素地址,但是我們不知道結(jié)束的0在哪,所以長(zhǎng)度未知,設(shè)為len
  2. arr+0也是首元素地址,未知結(jié)束標(biāo)志在哪,長(zhǎng)度未知,并且和上一個(gè)長(zhǎng)度相同,也是len
  3. *arr是什么?它是首元素a,數(shù)值97,不是一個(gè)地址,所以會(huì)報(bào)錯(cuò)
  4. arr[1]是元素b,不是一個(gè)地址,也會(huì)報(bào)錯(cuò)
  5. &arr是一個(gè)地址,是整個(gè)元素地址,但是和首元素地址相同,所以它的值也是len
  6. &arr+1是一個(gè)地址,但是它不是第二個(gè)元素的地址,而是跳過(guò)了整個(gè)數(shù)組的地址,指向f后面一個(gè)元素地址,跳過(guò)了6個(gè)元素,所以它的值len-6
  7. &arr[0]+1是一個(gè)地址,這個(gè)才是指向了第二個(gè)元素地址,值是len-1


讓我們通過(guò)VS2019編譯器進(jìn)行驗(yàn)證
由于3,4兩行代碼會(huì)報(bào)錯(cuò)從而導(dǎo)致程序終止運(yùn)行,我們將它屏蔽掉,最右邊是運(yùn)行結(jié)果,這與我們的分析是一致的。

題目2

int main() {	char arr[] = "abcdef";	printf("%d/n", sizeof(arr));//7	printf("%d/n", sizeof(arr + 0));//4/8	printf("%d/n", sizeof(*arr));//1	printf("%d/n", sizeof(arr[1]));//1	printf("%d/n", sizeof(&arr));//4/8	printf("%d/n", sizeof(&arr + 1));//4/8	printf("%d/n", sizeof(&arr[0] + 1));//4/8	printf("%d/n", strlen(arr));//6	printf("%d/n", strlen(arr + 0));//6	//printf("%d/n", strlen(*arr));//錯(cuò)誤	//printf("%d/n", strlen(arr[1]));//錯(cuò)誤	printf("%d/n", strlen(&arr));//6	printf("%d/n", strlen(&arr + 1));//隨機(jī)	printf("%d/n", strlen(&arr[0] + 1));//5}

這題和上面題只是多了一個(gè)結(jié)束的0,在結(jié)果上略有不同。

所以它包含7個(gè)元素,這和上面的多了一個(gè)’/0’
所以sizeof(arr)的值是7
strlen函數(shù)我們知道了結(jié)束的標(biāo)志在哪里,所以可以輕松判斷字符串長(zhǎng)度
而&arr+1跳過(guò)了整個(gè)字符串,下一個(gè)’/0’是未知的,所以是隨機(jī)值

題目3

int main() {	char* p = "abcdef";	printf("%d/n", sizeof(p));//4/8	printf("%d/n", sizeof(p + 1));//4/8	printf("%d/n", sizeof(*p));//1	printf("%d/n", sizeof(p[0]));//1	printf("%d/n", sizeof(&p));//4/8	printf("%d/n", sizeof(&p + 1));//4/8	printf("%d/n", sizeof(&p[0] + 1));//4/8	printf("%d/n", strlen(p));//6	printf("%d/n", strlen(p + 1));//5	//printf("%d/n", strlen(*p));	//printf("%d/n", strlen(p[0]));	printf("%d/n", strlen(&p));//隨機(jī)值a	printf("%d/n", strlen(&p + 1));//隨機(jī)值b	printf("%d/n", strlen(&p[0] + 1));//5}


我們需要知道的是,這是一個(gè)常量字符串,一個(gè)cha* 的指針不可能包含整個(gè)字符串,它指向的是首元素a。也就是說(shuō)*p==a,p是首元素的地址。
我們知道sizeof(地址)的值是4或者8
p,p+1,&p,&p+1,&p[0]+1它們都是地址
*p和p[0]代表首元素a,所以所占空間是1
當(dāng)首元素的地址傳進(jìn)strlen函數(shù)時(shí),直到往后找到’/0’,由此我們可以判斷strlen§==6,strlen(p+1)==5;
這里需要注意的是,我們這里&p和上面一個(gè)題的&arr是兩個(gè)概念,&p是地址的地址,指針p的地址,與原來(lái)字符串?dāng)?shù)組關(guān)系不大了。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/119109.html

相關(guān)文章

  • ??學(xué)懂C語(yǔ)言文件操作讀這篇就夠了(萬(wàn)字總結(jié),附習(xí)題)??

    目錄 ??? 一,寫(xiě)在前面 二,為什么使用文件 1,原因 2,數(shù)據(jù)流 3,緩沖區(qū)(Buffer) 4,C語(yǔ)言中帶緩沖區(qū)的文件處理 5,文件類(lèi)型 6,文件存取方式 三,什么是文件 1,程序文件 ?2,數(shù)據(jù)文件 3,文件名 四,文件的打開(kāi)和關(guān)閉? 1,文件指針 ?2,文件的打開(kāi)和關(guān)閉 五,文件的順序讀寫(xiě) 1,功能 2,代碼實(shí)現(xiàn) 六,文件的隨機(jī)讀寫(xiě) 1,fseek 2,ftell 3,rewind 七,...

    Genng 評(píng)論0 收藏0
  • 【數(shù)據(jù)結(jié)構(gòu)初階之二叉樹(shù)】:二叉樹(shù)相關(guān)的性質(zhì)和經(jīng)典的習(xí)題(用C語(yǔ)言實(shí)現(xiàn),附圖詳解)

    摘要:當(dāng)集合為空時(shí),稱(chēng)該二叉樹(shù)為空二叉樹(shù)。也就是說(shuō),如果一個(gè)二叉樹(shù)的層數(shù)為,且結(jié)點(diǎn)總數(shù)是,則它就是滿(mǎn)二叉樹(shù)。完全二叉樹(shù)完全二叉樹(shù)是效率很高的數(shù)據(jù)結(jié)構(gòu),完全二叉樹(shù)是由滿(mǎn)二叉樹(shù)而引出來(lái)的。 ...

    Martin91 評(píng)論0 收藏0
  • 系統(tǒng)地學(xué)習(xí)C++

    摘要:本書(shū)主要圍繞一系列逐漸復(fù)雜的程序問(wèn)題,以及用以解決這些問(wèn)題的語(yǔ)言特性展開(kāi)講解。你不只學(xué)到的函數(shù)和結(jié)構(gòu),也會(huì)學(xué)習(xí)到它們的設(shè)計(jì)目的和基本原理。因此我們把精力集中在最有價(jià)值的地方。本書(shū)不僅是對(duì)模板的權(quán)威解釋?zhuān)冶緯?shū)還深入地介紹了其他一般的思想。 C++ 入門(mén)教程(41課時(shí)) - 阿里云大學(xué) C+...

    joyqi 評(píng)論0 收藏0
  • 初出茅廬的‘小牛犢’(目標(biāo)中...)

    摘要:索性經(jīng)過(guò)了這兩個(gè)月的學(xué)習(xí),暫時(shí)對(duì)語(yǔ)言有了初步的了解,有句話說(shuō)得好最大的恐懼是未知。所以,今天先立一個(gè)大目標(biāo),成為一個(gè)牛犢子怎么呢樣年月日晚編程目標(biāo)正在學(xué)習(xí)語(yǔ)言中,語(yǔ)言我聽(tīng)說(shuō)是各種編程語(yǔ)言的基石,我打算把它學(xué)懂學(xué)透。 ①自我介紹: ?????? 我現(xiàn)在是一名粉嫩嫩的大一新生,在高考結(jié)束之后的三...

    不知名網(wǎng)友 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<