指針
1、哪些情況會(huì)出現(xiàn)野指針
指針變量未初始化、指針釋放后未為置空、指針操作超越變量作用域
2、描述內(nèi)存分區(qū)
程序在運(yùn)行前:分為代碼區(qū)、BSS段(未初始化數(shù)據(jù)區(qū))、data段(初始化數(shù)據(jù)區(qū))
程序在運(yùn)行后:堆區(qū)、棧區(qū)、全局區(qū)(靜態(tài)區(qū))、文字常量區(qū)、代碼區(qū)
3、描述普通局部變量、普通全局變量、靜態(tài)局部變量、靜態(tài)全局變量的區(qū)別
普通局部變量:
存在棧區(qū)、不初始化內(nèi)容隨機(jī)、只在定義所在的復(fù)合語(yǔ)句中有效、符合語(yǔ)句結(jié)束變量空間釋放
普通全局變量
存在全局區(qū)、不初始化內(nèi)容為0、進(jìn)程結(jié)束空間才被釋放,能被當(dāng)前源文件或其他源文件使用,只是其他源文件使用的時(shí)候,記得使用extern修飾
靜態(tài)局部變量:
存在全局區(qū)、不初始化內(nèi)容為0、整個(gè)進(jìn)程結(jié)束空間才被釋放,只能在定義所在的復(fù)合語(yǔ)句中有效
靜態(tài)全局變量
存在全局區(qū)、不初始化內(nèi)容為0、整個(gè)進(jìn)程結(jié)束空間才被釋放,只能被當(dāng)前源文件使用
4、描述指針數(shù)組的概念
指針數(shù)組本質(zhì)是數(shù)組,只是數(shù)組的每個(gè)元素是一個(gè)指針(地址)
5、描述32位或64位平臺(tái)下指針的大小
32位平臺(tái):任意類(lèi)型的指針大小為4字節(jié)
64位平臺(tái):任意類(lèi)型的指針大小為8字節(jié)
6、描述指針與指針變量的區(qū)別
指針:內(nèi)存中每一個(gè)字節(jié)都會(huì)分配一個(gè)32位或64位的編號(hào),這個(gè)編號(hào)就是地址, 而指針就是內(nèi)存單元的編號(hào)。
指針變量:本質(zhì)是變量 只是該變量存放的是空間的地址編號(hào)
7、指針和地址的區(qū)別
指針和地址最大的區(qū)別是指針有類(lèi)型,而地址沒(méi)有類(lèi)型,地址僅僅是地址編號(hào)。指針是由地址和類(lèi)型組成,指針不僅記錄了地址編號(hào)還記錄了該地址空間的類(lèi)型
8、描述一下int *p含義
p為指針變量,p自身類(lèi)型為int *,指向的類(lèi)型為int *,p可以保存的是int變量的地址編號(hào)
9、描述int *p[5]的含義
p是指針數(shù)組的數(shù)組名,該數(shù)組5個(gè)元素,每個(gè)元素為int *類(lèi)型。p是存放整形變量地址的數(shù)組。
10、描述int (*p)[10]的含義
p是數(shù)組指針變量,p的本質(zhì)是指針變量 保存的是數(shù)組的首地址,該數(shù)組必須有10個(gè)元素且每個(gè)元素的類(lèi)型為int類(lèi)型
11、描述int *p[10]的含義
p是指針數(shù)組,p的本質(zhì)是數(shù)組 只是數(shù)組的每個(gè)元素為int *類(lèi)型
12、描述int (*p)(int,int)的含義
p是函數(shù)指針變量, p的本質(zhì)是指針變量 ,它保存的是函數(shù)的入口地址,只是該函數(shù)必須是int類(lèi)型的返回值類(lèi)型,且有兩個(gè)int類(lèi)型的形參。
13、描述int (*p[5])(int ,int)的含義
p是函數(shù)指針數(shù)組。p的本質(zhì)是數(shù)組,數(shù)組的每個(gè)元素為函數(shù)指針,該函數(shù)必須是int返回值類(lèi)型和兩個(gè)整型的形參
14、描述數(shù)組元素指針變量的含義
數(shù)組元素指針變量是指保存數(shù)組元素的地址的指針變量,該變量+1跳過(guò)一個(gè)元素
15、兩個(gè)指向同一數(shù)組的元素指針變量的關(guān)系
指向同一數(shù)組的元素指針變量可以判斷大小、賦值但是相加是無(wú)意義的。
< >判斷兩指針變量的位置關(guān)系
==判斷兩指針變量是否指向同一處
=讓兩指針變量 指向同一處
-計(jì)算兩指針變量間相差的元素的個(gè)數(shù)
+兩指針變量相加是無(wú)意義
16、指針作為函數(shù)的參數(shù)的意義
指針作為函數(shù)的參數(shù),函數(shù)內(nèi)部可以修改外部指針?biāo)鶎?duì)應(yīng)空間的內(nèi)容
指針作為函數(shù)的參數(shù),如果傳遞的是自定義類(lèi)型數(shù)據(jù)的地址,可以節(jié)約空間
指針作為函數(shù)的參數(shù),可以將外部申請(qǐng)的空間傳遞到函數(shù)內(nèi)部使用
17、指針作為函數(shù)的返回值類(lèi)型的意義
指針作為函數(shù)的返回值類(lèi)型 可以將函數(shù)內(nèi)部的空間返回到函數(shù)外部使用
18、描述函數(shù)指針變量
函數(shù)指針變量本質(zhì)是指針變量,只是該變量保存的是函數(shù)的入口地址,我們可以通過(guò)函數(shù)指針變量簡(jiǎn)介的調(diào)用該指針變量所保存的函數(shù)
19、函數(shù)指針變量作為函數(shù)參數(shù)的意義
如果函數(shù)指針變量作為函數(shù)的參數(shù),那么該函數(shù)可以同函數(shù)指針參數(shù)間接調(diào)用外部傳遞過(guò)來(lái)的函數(shù)。這樣可以讓函數(shù)的功能多樣化,實(shí)現(xiàn)函數(shù)的功能復(fù)用
20、Int *和int **的關(guān)系
Int *它的類(lèi)型是int *類(lèi)型 所指向的的類(lèi)型為int類(lèi)型
Int **它的類(lèi)型是int **類(lèi)型 所指向的類(lèi)型為int *類(lèi)型
Int *定義的變量的地址可以用int **定義的變量來(lái)保存
21、指針中用到的*和&各自的作用
在定義指針變量時(shí),如:int *p;其中*的作用是修飾p為int *類(lèi)型的指針變量
在使用的時(shí)候,如*p;表示取p所保存的地址編號(hào)對(duì)應(yīng)空間的內(nèi)容
在使用的時(shí)候,如#表示取變量num的地址變量,如果num的類(lèi)型為int,那么&num的類(lèi)型就為int *
在使用的時(shí)候,*和&如果同時(shí)出現(xiàn),從左往右可以將*和&相互抵消
22、談?wù)勚羔樧兞康念?lèi)型
指針變量的類(lèi)型分為:自身類(lèi)型和指向類(lèi)型
自身類(lèi)型描述的是指針變量本身的類(lèi)型,而指向的類(lèi)型描述的是指針變量能夠保存啥類(lèi)型變量的地址
自身類(lèi)型一般用判斷指針變量賦值、傳參時(shí)的指針類(lèi)型是否匹配
指向類(lèi)型一般用于決定指針變量能夠訪(fǎng)問(wèn)所指向空間的長(zhǎng)度,以及指針變量+1跳過(guò)的指針寬度
比如:int *p;p自身的類(lèi)型為int *類(lèi)型,而p指向的類(lèi)型為int類(lèi)型。*p能取空間的指針數(shù)為4字節(jié),p+1跳過(guò)4字節(jié)
23、指針變量最好初始化為啥值
初始化為NULL
24、操作指針變量前,做好對(duì)指針變量做怎樣的判斷
操作指針變量前,最好判斷是否指向了NULL
25、指針作為函數(shù)的返回值時(shí)需要注意啥
指針作為函數(shù)的返回值,不要返回函數(shù)內(nèi)部中局部變量的地址。因?yàn)楹瘮?shù)中局部變量在函數(shù)結(jié)束后會(huì)被立即釋放,而外部通過(guò)函數(shù)返回值得到的地址也指向了以及回收的空間地址(非法地址),如果繼續(xù)操作改地址將會(huì)出現(xiàn)段錯(cuò)誤或其他不可確定的錯(cuò)誤
26、談?wù)刢onst int *p和int *const p的區(qū)別
Const int *p:const修飾的是*,p是可讀可寫(xiě),但是用戶(hù)不能通過(guò)*p修改外部空間的內(nèi)容(只能讀操作)
Int * const p;const修飾的是p,p一旦初始化了指向,就不能修改p的指向,但是用戶(hù)可以使用*p修改外部空間的值
27、數(shù)組指針的定義形式
數(shù)組指針的定義形式為:類(lèi)型 (*p)[]
28、數(shù)組指針的作用
數(shù)組指針可以保存數(shù)組的首地址,數(shù)組指針+1將跳過(guò)整個(gè)數(shù)組
一維數(shù)組指針可以和二維數(shù)組配合使用,可以使用一維數(shù)組指針保存二維數(shù)組的行地址,等同二維數(shù)組名一樣的操作二維數(shù)組的元素