C語(yǔ)言指針筆試題全面解析
前言
通過(guò)8道指針筆試題的解析,可以充分的復(fù)習(xí)到指針的相關(guān)知識(shí),并且題目中會(huì)結(jié)合許多之前的相關(guān)知識(shí),希望通過(guò)本篇文章,對(duì)大家所學(xué)的知識(shí)進(jìn)行一個(gè)復(fù)習(xí)。
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、指針筆試題
1.題目如圖:
逐條語(yǔ)句分析:
①.定義了一個(gè)大小為5的整型數(shù)組,并進(jìn)行了初始化
②.定義了一個(gè)整型指針變量ptr用來(lái)存放地址,這里的存放地址是(&a+1)的地址,由于是&a,所以表示的是整個(gè)數(shù)組a,所以&a+1跳過(guò)的是整個(gè)數(shù)組,這里的地址是a數(shù)組后面的一塊隨機(jī)變量地址。因?yàn)橹羔樦赶虻氖钦麄€(gè)數(shù)組,所以它的類(lèi)型是int(*)[5](數(shù)組指針),所以我們?cè)谒那懊孢M(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換,把它轉(zhuǎn)換為(int*)類(lèi)型,然后再存放到指針變量ptr內(nèi)部。
③.打印出來(lái)對(duì)應(yīng)的*(a+1)和*(ptr-1)的數(shù)值
圖解:
運(yùn)行結(jié)果:
2.題目如圖:
逐條語(yǔ)句分析:
①.定義一個(gè)結(jié)構(gòu)體變量,供我們一會(huì)使用
②.p是一個(gè)地址,沒(méi)有對(duì)它進(jìn)行任何的改變,所以就是用16進(jìn)制去進(jìn)行加減操作即可,0x1就是十六進(jìn)制的1,所以可以理解為p+1,打印出來(lái)對(duì)應(yīng)的十六進(jìn)制的地址,因?yàn)榻Y(jié)構(gòu)體的大小為20個(gè)字節(jié),所以+1就是跳過(guò)整個(gè)結(jié)構(gòu)體,就是加上整個(gè)結(jié)構(gòu)體的大小,即對(duì)應(yīng)的p的地址+20得到新的地址打印出來(lái),這里加上的20是十進(jìn)制我們需要把它轉(zhuǎn)換為十六進(jìn)制的數(shù),即對(duì)應(yīng)p的地址加上0x00000014即可
③.p在這里進(jìn)行了一步無(wú)符號(hào)長(zhǎng)整型的強(qiáng)制類(lèi)型轉(zhuǎn)換,然后再加上0x1(即十進(jìn)制的1),我們想既然我們把p類(lèi)型轉(zhuǎn)換為了一個(gè)整型,所以+1就是單純的+1,我們舉一個(gè)簡(jiǎn)單的例子,10和1都是整型數(shù)據(jù),10在內(nèi)存的存儲(chǔ)是0x0000000A,1在內(nèi)存的存儲(chǔ)是0x00000001,10+1 = 11 ,11對(duì)應(yīng)的內(nèi)存存儲(chǔ)是0x0000000B,所以我們知道了兩個(gè)整型相加,對(duì)應(yīng)的地址就是+1
④.p在這里進(jìn)行了一步無(wú)符號(hào)整型指針的強(qiáng)制類(lèi)型轉(zhuǎn)換,然后再加上0x1(即十進(jìn)制的1),我們想既然我們把p類(lèi)型轉(zhuǎn)換為一個(gè)整型指針,所以加+1,跳過(guò)的是一個(gè)整型指針變量,一個(gè)整型指針變量的大小為4,所以+1對(duì)應(yīng)的地址就是+4
運(yùn)行結(jié)果:

3.題目如圖:

逐條語(yǔ)句分析:
①.定義一個(gè)大小為4的整型數(shù)組,并且進(jìn)行了初始化
②.定義一個(gè)整型指針變量ptr1存放的是變量的地址,這個(gè)地址與第一題的方法一致在這里不再重復(fù),向上看第一題即可
③.這里的a單獨(dú)放在括號(hào)內(nèi),代表的是數(shù)組的首元素地址,類(lèi)型是(int*),在a的前面有一步強(qiáng)制類(lèi)型轉(zhuǎn)換把int*類(lèi)型轉(zhuǎn)換為了整型(int類(lèi)型)加+1后,我們由上一題可以知道整型的數(shù)值+1地址也是+1個(gè)字節(jié),然后再一步強(qiáng)制類(lèi)型轉(zhuǎn)換把它轉(zhuǎn)換為int*的類(lèi)型,把地址存儲(chǔ)到指針變量ptr2中
④.注意這里的是%x是以十六進(jìn)制的方法打印出來(lái)ptr[-1]和*ptr2
圖解:

運(yùn)行結(jié)果:

4.題目如圖:

逐條語(yǔ)句分析:
①.定義了一個(gè)3行2列的二維數(shù)組,并且進(jìn)行了初始化,我們看到這里面的元素,都是用圓括號(hào)括起來(lái)的,所以這里的是逗號(hào)表達(dá)式,我們知道逗號(hào)表達(dá)式的數(shù)值是取最后一個(gè)元素,所以就相當(dāng)于我們的數(shù)組元素只有{1,3,5}其他的的位置沒(méi)有初始化數(shù)值就都是0,所以就相當(dāng)于我們的數(shù)組就是這樣的int a[3][2] = {1,3,5,0,0,0}
②.定義一個(gè)指針變量p
③.指針變量p用來(lái)存放a[0]的地址,我們注意到這里的a[0],既沒(méi)有&a[0]也沒(méi)有sizeof(a[0]),所以這里的a[0]就是數(shù)組的首元素地址就是a[0][0]的地址,即就是數(shù)字1的地址,所以指針變量p存放的就是a[0][0]元素的地址
④.打印出來(lái)p[0]對(duì)應(yīng)的元素?cái)?shù)值,我們知道p[0] = *(p+0)所以就是對(duì)應(yīng)a[0][0]的數(shù)值
圖解:

運(yùn)行結(jié)果:

5.題目如圖:

逐條語(yǔ)句分析:
①.定義一個(gè)二維數(shù)組。
②.定義一個(gè)數(shù)組指針。
③.將二維數(shù)組首地址賦值給數(shù)組指針,我們看到這里的類(lèi)型是int(*)[4],而二維數(shù)組明顯是有5列的所以明顯這個(gè)數(shù)組指針不能存儲(chǔ)整個(gè)二維數(shù)組,只能存儲(chǔ)一部分。
④.打印出來(lái)地址的差值對(duì)應(yīng)的地址,以及對(duì)應(yīng)的差值數(shù)值。
圖解:
運(yùn)行結(jié)果:

6.題目如圖:

逐條語(yǔ)句分析:
①.定義一個(gè)二維數(shù)組并進(jìn)行初始化
②.定義一個(gè)指針變量ptr1存放的是變量的地址,我們看到這里的數(shù)組名是被&的,我們知道&數(shù)組名是表示的整個(gè)數(shù)組,所以&aa+1跳過(guò)的是整個(gè)數(shù)組,因?yàn)檫@里指向的是整個(gè)數(shù)組對(duì)應(yīng)的類(lèi)型就是int (*)[5],所以我們需要進(jìn)行一步強(qiáng)制類(lèi)型轉(zhuǎn)換,把它轉(zhuǎn)換為(int*)類(lèi)型存儲(chǔ)到指針類(lèi)型變量ptr2中
③.這里的aa沒(méi)有&符號(hào),也沒(méi)有在sizeof內(nèi)部,所以這里的aa是首元素地址,因?yàn)槭且粋€(gè)二維數(shù)組,所以首元素地址是第一行的地址,+1后跳到了第二行
④.打印出來(lái)*(ptr1-1)和*(ptr2-1)的數(shù)值
圖解:

運(yùn)行結(jié)果:

7.題目如圖:

逐條語(yǔ)句分析:
①.定義一個(gè)字符指針數(shù)組,并進(jìn)行了初始化
②.定義一個(gè)二級(jí)指針存放的是字符指針數(shù)組元素的首地址
③.二級(jí)指針++跳個(gè)一個(gè)元素的地址,指向的是下一個(gè)元素的地址
④.打印出來(lái)*pa對(duì)應(yīng)的元素
圖解:

運(yùn)行結(jié)果:

8.題目如圖:

逐條語(yǔ)句分析:
①.定義一個(gè)字符指針數(shù)組,并初始化
②.定義一個(gè)字符指針數(shù)組(二級(jí)指針),并初始化
③.定義一個(gè)三級(jí)指針指向cp字符指針數(shù)組
④~⑦按要求去打印數(shù)值
圖解:

運(yùn)行結(jié)果:

總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
PyQt5實(shí)現(xiàn)滑動(dòng)開(kāi)關(guān)的示例詳解
這篇文章主要為大家詳細(xì)介紹了如何使用PyQt5實(shí)現(xiàn)滑動(dòng)開(kāi)關(guān)的效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-12-12
C++類(lèi)繼承之子類(lèi)調(diào)用父類(lèi)的構(gòu)造函數(shù)的實(shí)例詳解
這篇文章主要介紹了C++類(lèi)繼承之子類(lèi)調(diào)用父類(lèi)的構(gòu)造函數(shù)的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文大家能夠掌握C++類(lèi)繼承的相關(guān)知識(shí),需要的朋友可以參考下2017-09-09
深入c語(yǔ)言continue和break的區(qū)別詳解
本篇文章是對(duì)c語(yǔ)言中continue和break的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
C語(yǔ)言實(shí)現(xiàn)常用字符串庫(kù)函數(shù)(推薦)
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)常用字符串庫(kù)函數(shù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-11-11
C/C++ 中const關(guān)鍵字的用法小結(jié)
C++中的const關(guān)鍵字的用法非常靈活,而使用const將大大改善程序的健壯性。這篇文章主要介紹了C/C++ 中const關(guān)鍵字的用法,需要的朋友可以參考下2020-02-02
詳解C++設(shè)計(jì)模式編程中責(zé)任鏈模式的應(yīng)用
這篇文章主要介紹了C++設(shè)計(jì)模式編程中責(zé)任鏈模式的應(yīng)用,責(zé)任鏈模式使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求,從而避免請(qǐng)求的發(fā)送者和接收者之間的耦合關(guān)系,需要的朋友可以參考下2016-03-03

