国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

C語言:指針習題

番茄西紅柿 / 3316人閱讀

摘要:目錄前言題目題目題目題目前言在學習完語言的初階以及進階以后我們需要一些習題來檢驗自己的學習成果下面將以一些筆試題和面試題來分析。在題目的分析中如有錯誤歡迎指正。

前言

在學習完C語言的初階以及進階以后,我們需要一些習題來檢驗自己的學習成果,下面將以一些筆試題和面試題來分析。
在題目的分析中如有錯誤,歡迎指正。

題目

題目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));//隨機值b	printf("%d/n", strlen(arr + 0));//隨機值b	printf("%d/n", strlen(*arr));//錯誤	printf("%d/n", strlen(arr[1]));//錯誤	printf("%d/n", strlen(&arr));//隨機值b	printf("%d/n", strlen(&arr + 1));//隨機值b-6	printf("%d/n", strlen(&arr[0] + 1));//隨機值b-1	return 0;}

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

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

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

具體答案是不是我們分析的那樣,用VS2019編譯器進行驗證

接下來分析strlen函數(shù)
我們知道strlen接受字符串地址,然后往后找到/0結束
但是我們在題目中初始化時沒有給’/0’,這樣就會造成他會一直往后走找到結束標志’/0’。

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


讓我們通過VS2019編譯器進行驗證
由于3,4兩行代碼會報錯從而導致程序終止運行,我們將它屏蔽掉,最右邊是運行結果,這與我們的分析是一致的。

題目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));//錯誤	//printf("%d/n", strlen(arr[1]));//錯誤	printf("%d/n", strlen(&arr));//6	printf("%d/n", strlen(&arr + 1));//隨機	printf("%d/n", strlen(&arr[0] + 1));//5}

這題和上面題只是多了一個結束的0,在結果上略有不同。

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

題目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));//隨機值a	printf("%d/n", strlen(&p + 1));//隨機值b	printf("%d/n", strlen(&p[0] + 1));//5}


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

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

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/119109.html

相關文章

  • ??學懂C語言文件操作讀這篇就夠了(萬字總結,附習題)??

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

    Genng 評論0 收藏0
  • 【數(shù)據(jù)結構初階之二叉樹】:二叉樹相關的性質和經(jīng)典的習題(用C語言實現(xiàn),附圖詳解)

    摘要:當集合為空時,稱該二叉樹為空二叉樹。也就是說,如果一個二叉樹的層數(shù)為,且結點總數(shù)是,則它就是滿二叉樹。完全二叉樹完全二叉樹是效率很高的數(shù)據(jù)結構,完全二叉樹是由滿二叉樹而引出來的。 ...

    Martin91 評論0 收藏0
  • 系統(tǒng)地學習C++

    摘要:本書主要圍繞一系列逐漸復雜的程序問題,以及用以解決這些問題的語言特性展開講解。你不只學到的函數(shù)和結構,也會學習到它們的設計目的和基本原理。因此我們把精力集中在最有價值的地方。本書不僅是對模板的權威解釋,而且本書還深入地介紹了其他一般的思想。 C++ 入門教程(41課時) - 阿里云大學 C+...

    joyqi 評論0 收藏0
  • 初出茅廬的‘小牛犢’(目標中...)

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

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

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<