摘要:因為指針指向的是整個數組,所以它的類型是數組指針,所以我們在它的前面進行強制類型轉換,把它轉換為類型,然后再存放到指針變量內部。
通過8道指針筆試題的解析,可以充分的復習到指針的相關知識,并且題目中會結合許多之前的相關知識,希望通過本篇文章,對大家所學的知識進行一個復習。
提示:以下是本篇文章正文內容,下面案例可供參考
?逐條語句分析:
①.定義了一個大小為5的整型數組,并進行了初始化
②.定義了一個整型指針變量ptr用來存放地址,這里的存放地址是(&a+1)的地址,由于是&a,所以表示的是整個數組a,所以&a+1跳過的是整個數組,這里的地址是a數組后面的一塊隨機變量地址。因為指針指向的是整個數組,所以它的類型是int(*)[5](數組指針),所以我們在它的前面進行強制類型轉換,把它轉換為(int*)類型,然后再存放到指針變量ptr內部。
③.打印出來對應的*(a+1)和*(ptr-1)的數值
圖解:
?
?運行結果:
?
逐條語句分析:
①.定義一個結構體變量,供我們一會使用
②.p是一個地址,沒有對它進行任何的改變,所以就是用16進制去進行加減操作即可,0x1就是十六進制的1,所以可以理解為p+1,打印出來對應的十六進制的地址,因為結構體的大小為20個字節,所以+1就是跳過整個結構體,就是加上整個結構體的大小,即對應的p的地址+20得到新的地址打印出來,這里加上的20是十進制我們需要把它轉換為十六進制的數,即對應p的地址加上0x00000014即可
③.p在這里進行了一步無符號長整型的強制類型轉換,然后再加上0x1(即十進制的1),我們想既然我們把p類型轉換為了一個整型,所以+1就是單純的+1,我們舉一個簡單的例子,10和1都是整型數據,10在內存的存儲是0x0000000A,1在內存的存儲是0x00000001,10+1 = 11 ,11對應的內存存儲是0x0000000B,所以我們知道了兩個整型相加,對應的地址就是+1
④.p在這里進行了一步無符號整型指針的強制類型轉換,然后再加上0x1(即十進制的1),我們想既然我們把p類型轉換為一個整型指針,所以加+1,跳過的是一個整型指針變量,一個整型指針變量的大小為4,所以+1對應的地址就是+4
?運行結果:
?
逐條語句分析:
①.定義一個大小為4的整型數組,并且進行了初始化
②.定義一個整型指針變量ptr1存放的是變量的地址,這個地址與第一題的方法一致在這里不再重復,向上看第一題即可
③.這里的a多帶帶放在括號內,代表的是數組的首元素地址,類型是(int*),在a的前面有一步強制類型轉換把int*類型轉換為了整型(int類型)加+1后,我們由上一題可以知道整型的數值+1地址也是+1個字節,然后再一步強制類型轉換把它轉換為int*的類型,把地址存儲到指針變量ptr2中
④.注意這里的是%x是以十六進制的方法打印出來ptr[-1]和*ptr2
圖解:
?逐條語句分析:
①.定義了一個3行2列的二維數組,并且進行了初始化,我們看到這里面的元素,都是用圓括號括起來的,所以這里的是逗號表達式,我們知道逗號表達式的數值是取最后一個元素,所以就相當于我們的數組元素只有{1,3,5}其他的的位置沒有初始化數值就都是0,所以就相當于我們的數組就是這樣的int a[3][2] = {1,3,5,0,0,0}
②.定義一個指針變量p
③.指針變量p用來存放a[0]的地址,我們注意到這里的a[0],既沒有&a[0]也沒有sizeof(a[0]),所以這里的a[0]就是數組的首元素地址就是a[0][0]的地址,即就是數字1的地址,所以指針變量p存放的就是a[0][0]元素的地址
④.打印出來p[0]對應的元素數值,我們知道p[0] = *(p+0)所以就是對應a[0][0]的數值
圖解:
???運行結果:
??逐條語句分析:
①.定義一個二維數組。
②.定義一個數組指針。
③.將二維數組首地址賦值給數組指針,我們看到這里的類型是int(*)[4],而二維數組明顯是有5列的所以明顯這個數組指針不能存儲整個二維數組,只能存儲一部分。
④.打印出來地址的差值對應的地址,以及對應的差值數值。
圖解:
??運行結果:
???逐條語句分析:
①.定義一個二維數組并進行初始化
②.定義一個指針變量ptr1存放的是變量的地址,我們看到這里的數組名是被&的,我們知道&數組名是表示的整個數組,所以&aa+1跳過的是整個數組,因為這里指向的是整個數組對應的類型就是int (*)[5],所以我們需要進行一步強制類型轉換,把它轉換為(int*)類型存儲到指針類型變量ptr2中
③.這里的aa沒有&符號,也沒有在sizeof內部,所以這里的aa是首元素地址,因為是一個二維數組,所以首元素地址是第一行的地址,+1后跳到了第二行
④.打印出來*(ptr1-1)和*(ptr2-1)的數值
圖解:
運行結果:
逐條語句分析:
①.定義一個字符指針數組,并進行了初始化
②.定義一個二級指針存放的是字符指針數組元素的首地址
③.二級指針++跳個一個元素的地址,指向的是下一個元素的地址
④.打印出來*pa對應的元素
圖解:
?運行結果:
?逐條語句分析:
①.定義一個字符指針數組,并初始化
②.定義一個字符指針數組(二級指針),并初始化
③.定義一個三級指針指向cp字符指針數組
④~⑦按要求去打印數值
圖解:
?
??運行結果:
?
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/119816.html
摘要:結尾有關這四道經典的指針筆試題講解就到此結束了,如果覺得文章對自己有所幫助,歡迎大家多多點贊收藏 ?前言 : 今天博主來講解4道經典的指針筆試題,很多朋友沒有深刻理...
摘要:所以是數組指針,而是指針數組。因為對一個二維數組,可以不知道有多少行,但是必須知道一行多少元素。當二維數組數組名傳參,形參接收時,數組的行可以省略,列不能省略,如果省略了列,我們就無法知道當指針加減跳過幾個字節。 ...
摘要:故使用無具體類型,又稱通用類型,即可以接收任意類型的指針,但是無法進行指針運算解引用,整數等。求指針所占字節而不是解引用訪問權限大小。數組就是整個數組的大小,數組元素則是數組元素的大小,指針大小都為。 ...
摘要:中怎樣實現類之間的關系如一對多多對多的關系中怎樣實現類之間的關系如一對多多對多的關系它們通過配置文件中的來實現類之間的關聯關系的。 Hibernate常見面試題 Hibernate工作原理及為什么要用? Hibernate工作原理及為什么要用? 讀取并解析配置文件 讀取并解析映射信息,創建SessionFactory 打開Sesssion 創建事務Transation 持久化操作 提...
閱讀 649·2021-11-11 16:55
閱讀 2160·2021-11-11 16:55
閱讀 1951·2021-11-11 16:55
閱讀 2341·2021-10-25 09:46
閱讀 1598·2021-09-22 15:20
閱讀 2270·2021-09-10 10:51
閱讀 1703·2021-08-25 09:38
閱讀 2612·2019-08-30 12:48