指針典型例題分析與解答

字號:

1 對于變量x,其地址可以寫成________;對于數(shù)組y[10],其首地址可以寫成________或__________;對于數(shù)組元素y[3],其地址可以寫成__________或_________。
    【分析】變量的地址可以寫成“&變量名”。數(shù)組的首地址就是數(shù)組名,也可以寫成第 1個元素的地址“&數(shù)組名[0]”。數(shù)組元素的地址可以寫成“&數(shù)組元素”,也可以寫成“數(shù)組首地址十下標(biāo)”。
    【 答案】 &x
     y
     &y[0]
     &y[3]
     y+3
    2 設(shè)有定義語句“int k,*p1=&k,*p2;”,能完成表達(dá)式“p2=&k”功能的表達(dá)式可以寫成_______________。
    【分析】注意原來表達(dá)式“p2=&k”的主要功能是將變量k的地址存放到指針變量p2中?,F(xiàn)
    在變量k的地址已經(jīng)存放在指針變量pl中,所以完成“p2=&k”功能的表達(dá)式是:p2=p1.
    【答案】p2=p1
    3 設(shè)有兩條語句“int a,*p=&a;”和“*p= a;”,則下列說法中正確的是()
    ①兩條語句中的“*p”含義完全相同
    ②兩條語句中的“*p=&a”和“*p=a”功能完全相同
    ③第 1條語句中的“*p=&a”是定義指針變量 p并對其初始化
    ④第2條語句中的“*p=a”是將a的值賦予變量p
    【分析】分析備選答案①:第1條語句是數(shù)據(jù)定義語句,其中的“*p”表示定義的變量p是指針型變量;第2條語句是賦值語句,其中的“*p”代表它所指向的變量a,所以該備選答案是錯誤的,不符合題意。分析備選答案②:第 1條語句中的“*p= &a”是將變量 a的地址以初值方式賦予指針變量 p;而第 2條語句中的“*p=a”是將變量 a中的值賦予指針變量 P指向的變量(注意也是 a,即該語句的作用和 a= a完全相同),顯然該備選答案是錯誤的,不符合題意。再分析備選答案③:顯然該答案是正確的,符合題意。至于備選答案④,顯然是錯誤的“*p”是代表指針變量p指向的變量,不能代表指針變量p。
    【答案】③
    4 設(shè)有定義語句“ int x,*p= &x;”,則下列表達(dá)式中錯誤的是()
     ①*&x ②&*x ③*&p ④&*p
    【分析】注意“*”和“&”運算將是同一優(yōu)先級別的,結(jié)合性是自有向左。接著來分報備選答案①:&x代表變量x的地址,*(&x)代表“&x”地址對應(yīng)的變量,即變量X,一股說“*&變量”就是該變量,所以該答案是正確的,不符合題意。備選答案②中的“*x”是錯誤的,因為x是普通變量,不是指針型變量,而運算符“*”的運算對象必須是地址,所以該答案符合題意。顯然備選答案③和④都是正確的。我們來分析一下。備選答案③的格式屬于“*&變量”,所以其結(jié)果為指針型變量p,是正確的。備選答案④中的“*P”代表指針變量P指向的變量x,(*p)代表變量X的地址,也是正確的。一般說“&*指針變量”,則代表指針變量指向的變量的址。
    【答案】 ②
    5 設(shè)有定義語句“float s[10],*p1=s,*p2=s+5;”,下列表達(dá)式中錯誤的是()
     ① p1= 0xffff ② p2-- ③ p1-p2 ④ p1<=p2
    【分析】當(dāng)兩個指針變量指向同一個數(shù)組時,每個針變量都可以進(jìn)行增 l、減 1運算,兩個指針變量之間可以進(jìn)行減法運算和關(guān)系運算。顯然備選答案②、③。④是正確的,不符合題意,只有備選答案①才是錯誤的,符合題意。對備選答案①的分析也很簡單,因為C語言規(guī)定,所以的地址表達(dá)式中,不允許使用具體的整數(shù)來表示地址。
    【答案】①