西安專業(yè)網(wǎng)站建設(shè)公司開創(chuàng)集團(tuán)與百度
歡迎找我進(jìn)行職業(yè)規(guī)劃,超值的自我投資?->?嵌入式軟件工程師一對(duì)一指導(dǎo)
1.設(shè)有定義char *p[]={"Shanghai","Beijing","Honkong"};則結(jié)果為j字符的表達(dá)式是()
A?*p[1] +3
B?*(p[1] +3)
C?*(p[3] +1)
D?p[3] [1]
解析:
p
?是一個(gè)指針數(shù)組,其中每個(gè)元素都指向一個(gè)字符串字面量。
A.?*p[1] + 3
這個(gè)表達(dá)式首先解引用?p[1]
(即指向 "Beijing" 的指針),得到 'B' 字符,然后將其 ASCII 值加 3,結(jié)果是 'E' 的 ASCII 值,而不是 'j'。
B.?*(p[1] + 3)
這個(gè)表達(dá)式首先計(jì)算?p[1] + 3
,它是指向 "Beijing" 字符串中第四個(gè)字符(從0開始計(jì)數(shù))的指針(即指向 'j' 的指針),然后通過(guò)解引用得到 'j' 字符。這是正確的表達(dá)式。
C.?*(p[3] + 1)
這個(gè)表達(dá)式試圖訪問(wèn)?p[3]
,但數(shù)組?p
?只有三個(gè)元素(索引為 0, 1, 2),所以?p[3]
?是未定義的,這將導(dǎo)致未定義行為。(下角標(biāo)錯(cuò)誤)
D.?p[3][1]
同樣,這個(gè)表達(dá)式也試圖訪問(wèn)?p[3]
,這是未定義的,因此這個(gè)表達(dá)式也是錯(cuò)誤的。
綜上所述,正確答案是 B,即?*(p[1] + 3)
,這個(gè)表達(dá)式將返回 'j' 字符。
2.有以下程序,?程序運(yùn)行后的輸出結(jié)果是( )
#include "stdio.h"
void main() {
int a[5] = {1, 2, 3, 4, 5}, b[5] = {0, 2, 1, 3, 0}, i, s = 0;
for(i=0; i < 5; i++) s = s + a[b[i]];
printf("%d\n", s);
}
解析:
首先,我們有兩個(gè)數(shù)組?a
?和?b
:
int a[5] = {1, 2, 3, 4, 5};
int b[5] = {0, 2, 1, 3, 0};
數(shù)組?a
?包含值?{1, 2, 3, 4, 5}
,數(shù)組?b
?包含值?{0, 2, 1, 3, 0}
。
接下來(lái),我們有一個(gè)循環(huán),它遍歷數(shù)組?b
?的每個(gè)元素,并使用這些元素作為數(shù)組?a
?的索引來(lái)累加值:
???????
for(i=0; i < 5; i++)
s = s + a[b[i]];
讓我們逐步執(zhí)行這個(gè)循環(huán):
-
當(dāng)?
i = 0
?時(shí),b[0] = 0
,所以?a[b[0]] = a[0] = 1
。因此,s = s + 1
,s
?變?yōu)?1
。 -
當(dāng)?
i = 1
?時(shí),b[1] = 2
,所以?a[b[1]] = a[2] = 3
。因此,s = s + 3
,s
?變?yōu)?4
。 -
當(dāng)?
i = 2
?時(shí),b[2] = 1
,所以?a[b[2]] = a[1] = 2
。因此,s = s + 2
,s
?變?yōu)?6
。 -
當(dāng)?
i = 3
?時(shí),b[3] = 3
,所以?a[b[3]] = a[3] = 4
。因此,s = s + 4
,s
?變?yōu)?10
。 -
當(dāng)?
i = 4
?時(shí),b[4] = 0
,所以?a[b[4]] = a[0] = 1
。因此,s = s + 1
,s
?變?yōu)?11
。
最后,程序輸出?s
?的值是?11
。
3.在函數(shù)調(diào)用過(guò)程中,如果函數(shù)funA調(diào)用了函數(shù)funB,函數(shù)funB又調(diào)用了函數(shù)funA,則()
A?稱為函數(shù)的直接遞歸調(diào)用
B?稱為函數(shù)的間接遞歸調(diào)用
C?稱為函數(shù)的循環(huán)調(diào)用
D?C語(yǔ)言中不允許這樣的遞歸調(diào)用
解析:
-
直接遞歸調(diào)用:指的是一個(gè)函數(shù)在其執(zhí)行過(guò)程中直接調(diào)用自身。
-
間接遞歸調(diào)用:涉及兩個(gè)或更多函數(shù),其中一個(gè)函數(shù)調(diào)用另一個(gè)函數(shù),而那個(gè)函數(shù)又直接或間接地調(diào)用回原來(lái)的函數(shù)。
-
循環(huán)調(diào)用:通常指的是一系列函數(shù)相互調(diào)用,形成一個(gè)閉環(huán),但沒(méi)有明確的遞歸結(jié)構(gòu)(即不是函數(shù)自己調(diào)用自己)。
題目中的情況:函數(shù)funA
調(diào)用了函數(shù)funB
,而函數(shù)funB
又調(diào)用了函數(shù)funA
。
-
這不是直接遞歸調(diào)用,因?yàn)橹苯舆f歸調(diào)用要求函數(shù)自己調(diào)用自己,而這里是兩個(gè)函數(shù)相互調(diào)用。
-
這是間接遞歸調(diào)用的一個(gè)例子,因?yàn)?code>funA和
funB
通過(guò)彼此調(diào)用形成了一個(gè)間接的遞歸鏈。 -
雖然函數(shù)間相互調(diào)用形成了一個(gè)閉環(huán),但這不是傳統(tǒng)意義上的循環(huán)調(diào)用,因?yàn)檠h(huán)調(diào)用通常不涉及遞歸的概念。
-
C語(yǔ)言中允許這樣的遞歸調(diào)用,只要遞歸不是無(wú)限的(即必須有終止條件來(lái)防止棧溢出)。
綜上所述,這種情況最符合間接遞歸調(diào)用的定義。
因此,正確答案是?B 稱為函數(shù)的間接遞歸調(diào)用。
4.執(zhí)行以下語(yǔ)句,輸出結(jié)果為()???????
#include <stdio.h>
int main( ) {
char *p1 = "hello";
char *p2 = "world";
char *p3 = "a piece of cake";
char *str[] = {p1, p2, p3};
printf("%c", *(str[0] + 1));
}
解析;
題目定義了三個(gè)字符串常量?p1
,?p2
, 和?p3
,然后創(chuàng)建了一個(gè)字符指針數(shù)組?str
,該數(shù)組包含這三個(gè)字符串的地址。接下來(lái),我們使用?printf
?函數(shù)來(lái)打印?str[0]
(即?p1
?指向的字符串?"hello"
)的第二個(gè)字符。
char *p1 = "hello"; // p1 指向字符串 "hello"
char *p2 = "world"; // p2 指向字符串 "world"
char *p3 = "a piece of cake"; // p3 指向字符串 "a piece of cake"
char *str[] = {p1, p2, p3}; // str 是一個(gè)字符指針數(shù)組,包含 p1, p2, 和 p3 的地址
printf("%c", *(str[0] + 1)); // 打印 str[0](即 p1)指向的字符串的第二個(gè)字符
str[0]
?是?p1
,它指向字符串?"hello"
。str[0] + 1
?是將指針?p1
?向前移動(dòng)一個(gè)字符位置,因此它現(xiàn)在指向?"hello"
?中的?'e'
。
*(str[0] + 1)
?解引用這個(gè)新的指針位置,得到字符?'e'
。
因此,printf("%c", *(str[0] + 1));
?會(huì)打印字符?'e'
。
所以,程序的輸出結(jié)果是:e
未完待續(xù),持續(xù)更新!
以防后邊找不到可以點(diǎn)贊收藏下!
歡迎找我進(jìn)行職業(yè)規(guī)劃,超值的自我投資?->?嵌入式軟件工程師一對(duì)一指導(dǎo)