(各個公司面試原題)線上做了一套CC++綜合測試題,也來測一下你的水平吧(一)
剛才又把做錯的題看了看,感覺自己有太多的東西要補啊!!!
下面給出試題,和我對題目的一些理解
1.下面描述正確的是
int *p1 = new int[10];
int *p2 = new int[10]();
A. p1和p2申請的空間裡面的值都是隨機值
B. p1和p2申請的空間裡的值都已經初始化
C. p1申請的空間裡的值是隨機值,p2申請的空間裡的值已經初始化
D. p1申請的空間裡的值已經初始化,p2申請的空間裡的值是隨機值
答案:C
我的理解:應該是呼叫了帶有預設引數值的建構函式吧 (據說,《C和指標》這本書裡有介紹)
2.下面的程式可以從
knuth(int n, int m)
{
srand((unsigned int)time(0));
for (int i = 0; i < n; i++) {
if ( ) {
cout << i << endl;
( );
}
}
}
A. rand()%(n-i)<=mm--
B. rand()%(n-i)<mm--
C. rand()%(n-i)>=mm++
D. rand()%(n-i)>mm++
答案:B
我選的A,錯的太虧了。
貼個圖
3.以下prim函式的功能是分解質因數。括號內的內容應該為?
void prim(int m, int n)
{
if (m > n)
{
while ( ) n++;
( );
prim(m, n);
cout << n << endl;
}
}
A. m/nm/=n
B. m/n m%=n
C. m%nm%=n
D.
答案:D
4.
enum string
{
x1,
x2,
x3=10,
x4,
x5,
} x;
問x等於什麼?
A. 5
B. 12
C. 0
D. 隨機值
答案:C
5.
unsigned char *p1;
unsigned long *p2;
p1=(unsigned char *)0x801000;
p2=(unsigned long *)0x810000;
請問p1+5= 什麼?
p2+5= 什麼?
A. 801005810005
B. 801010810014
C. 801005810014
D. 801010810015
答案:C
p1+5=p1+5*sizeof(unsigned char),char佔1位元組
p2+5=p2+5*sizeof( unsigned long),long佔4位元組
最後轉換為十六進位制
6.
在32位機器中,如下程式碼:
void example(char acWelcome[])
{
printf("%d",sizeof(acWelcome));
return;
}
void main()
{
char acWelcome[]="Welcome to Huawei Test";
example(acWelcome);
return;
}
的輸出是?
A. 0
B. 4
C. 23
D. 24
答案:B
陣列作為引數傳入函式會退化為指標,所以,不管acWelcome的長度是多少(即便為空),都返回4
如果不經過函式而直接寫出以下語句
printf("%d\n",sizeof(acWelcome));
則輸出23,為acWelcome的長度+1(結束符);
7.
下面關於虛擬函式和函式過載的敘述不正確的是
A. 虛擬函式不是類的成員函式
B. 虛擬函式實現了C++的多型性
C. 函式過載允許非成員函式,而虛擬函式則不行
D. 函式過載的呼叫根據引數的個數、序列來確定,而虛擬函式依據物件確定
答案:A
很明顯,A是錯的。當時就突然想到,sizeof(Class)是受虛擬函式影響的,但不受static變數和static函式影響
8.
處理a.html檔案時,以下哪行虛擬碼可能導致記憶體越界或者丟擲異常()
<span style="white-space:pre"> </span>int totalBlank = 0;
int blankNum = 0;
int taglen = page.taglst.size();
A for(int i = 1; i < taglen-1; ++i)
{
//check blank
B while(page.taglst[i] == "<br>" && i < taglen)
{
C ++totalBlank;
D ++i;
}
E if(totalBlank > 10)
F blankNum += totalBlank;
G totalBlank = 0;
}
注意:以下程式碼中taglen是html檔案中存在元素的個數,a.html中taglen的值是15,page.taglst[i]取的是a.html中的元素,例如page.taglst[1]的值是<html>
a.html的檔案如下:
<html>
<title>test</title>
<body>
<div>aaaaaaa</div>
</body>
</html>
<br>
<br>
<br>
<br>
<br>
A. A
B. B
C. C
D. D
E. E
F. F
G. G
答案:B
9.
void Func(char str_arg[100])
{
printf("%d\n",sizeof(str_arg));
}
int main(void)
{
char str[]="Hello";
printf("%d\n",sizeof(str));
printf("%d\n",strlen(str));
char*p=str;
printf("%d\n",sizeof(p));
Func(str);
}
32位系統下下面程式的輸出結果為多少?
A. 5 5 4 4
B. 6 5 4 4
C. 6 5 6 4
D. 5 5 5 100
答案:B
sizeof(str)和strlen(str)的區別在於,前者會把str末尾的'\0'算上
第3個輸出我也不太理解,若有如下程式碼
char a='c';
char *p=&a;
則,sizeof(a)輸出1,sizeof(p)輸出4.
第4個輸出
陣列作為引數傳入函式會退化為指標,這個和題6一樣
10.
下面程式執行後的結果為:
char str[] = "glad to test something";
char *p = str;
p++;
int *p1 = static_cast<int *="">(p);
p1++;
p = static_cast<char *="">(p1);
printf("result is %s\n", p);
A. glad to testsomething
B. ad to testsomething
C. test something
D. to testsomething
答案:D
程式碼執行不了。。。
不過覺得這題的關鍵就是,p++是+1個位元組(char型佔1個位元組),p1++是+4個位元組(int型佔4個位元組)