C&C++專項小練(三)

專項小練(三)

1 函數形參

形參與實參:C語言中,所有函數參數都是"通過值"傳遞的,傳遞給被調用函數的參數值存放在臨時變量中,被調用函數不能直接修改主調函數中變量的值,而只能修改其私有的臨時副本的值
指針參數:調用者可向被調用函數提供帶設置值的變量地址即指針變量,被調用函數將對應參數聲明爲指針類型,並通過它間接訪問;
數組參數
:當把數組名用作參數時,傳遞給函數的值是數組起始元素的位置或地址,通過數組下標可訪問或修改數組元素的值。

函數調用語句func(rec1,rec2+rec3,(rec4,rec5));中的實在參數的個數是( 3 )。
函數調用的形式: 函數名(實參1,實參2,實參3 ,… ,實參n)
實參可以是具有確定值的常量、變量、表達式、函數等,rec1是一個變量。rec2+rec3是一個表達式。(rec4,rec5)爲逗號運算符,優先級別最低,逗號表達式的值是最後一個表達式的值。

2 若整型變量x的初值爲6,則計算表達式“x+=x-=x*x”之後,x的值是(-50)
考察賦值運算符
賦值運算是從右往左,

x+=x-=x*x  x=6
x*x=36
x-=x*x  即爲x=x-x*x,此時x=6-36=-30
x+=x-=x*x  即爲x=x+(-30)  =-30+(-30)=-60

3 以下哪個屬於在預編譯階段執行____,以下哪些指令屬於操作符___

a:malloc; 
b:++; 
c:#pragma;  
d:sizeof;   
e:#define

預編譯c,e 操作符b,d
帶#的肯定是預編譯指令了,故c和e預編譯;sizeof爲操作符,如"+,-"等,malloc爲函數,參數爲字節數,返回一個void* 指針。

4 若a、b、c1、c2、x、y均是整型變量,正確的switch語句

switch(a+b)
{
case 1:y=a+b;break; 
case 0:y=a-b;break;
case 3:y=b-a;break;
}

考察點:switch語句格式
5 靜態外部變量只在本文件內可用
靜態變量
靜態變量如何跨文件訪問?
走位崴了腳:全局變量(函數外定義)分爲:(1)靜態全局變量(外部靜態變量,static int a;)和(2)外部全局變量(extern int a;),extern可以省略。靜態全局變量的作用域爲本文件,限制別的文件訪問,外部全局變量可以被其他文件引用
說法是否有誤??
6 程序中, int32-t 表示一個有符號的 32 位整數,程序的入口是 main 函數,問最終 res 的結果是多少?

int32_t f(int_32_t a,int32_t b){
	while(a+b>0){
		a = a+1;
		b = b+1; 
	}
	return a+b;
}
int32_t main(){
	int32_t res = f(1,0);
}

TheBestIsYetToCome-
@ 羽落長安 的解析不錯,以char爲例
f(1,0):
a=2 b=-1
a=3 b=-2

a=127 b=-126
a=128 b=-127 溢出–>a=-128 b=-127 char範圍:-128~127
return a+b:-128-127實際上是1(char範圍),繼續循環
而原例爲int_32t,臨界情況 a+b: -232+(-232+1)=1,也繼續循環。
因此死循環。

unsigned int、int32_t long int???

7


int a[3];
a[0] = 0; a[1] = 1; a[2] = 2;
int *p, *q;
p = a;
q = &a[2];
 
則a[q - p] = ?

yj129
這裏q-p的實際運算是:(q的地址值-p的地址值)/sizeof(int),所以爲2.
基礎數據類型在32、64位操作系統?(處理器)中差異
怎麼不同位數處理器中是怎麼存儲及運算的?
舉例在 32 位編譯器上,設有定義
char *str1 = “Hello”, str2[] = “Hello”; ,
則以下語句 printf("%d %d", sizeof(str1), sizeof(str2)); 的輸出結果是(4,6)
考查了指向字符串的指針和字符數組, str1 爲一個字符指針,所以 sizeof 爲 4 , str2 爲字符數組,其中包含 6 個字符,所以答案爲 4 6 。
8 引用可以是void類型嗎?
不可以
huixieqingchun
引用只是一個別名,是已有變量的別名,而void類型是空類型,是沒有分配內存的。所以引用不能是void類型

8 7&3+12的值是15。請問這個說法是正確的嗎?錯誤
考察C語言運算符優先級

1.     ()    []     .     ->
2.     !     ~     ++     --     +     -     *     &  (type) sizeof
3.     *     /     %
4.     +     -
5.     >>    <<
6.     >     >=     <     <= 
7.     ==    !=
8.     &
9.     ^
10.    |
11.    &&
12.    ||
13.    ? :
14.    =     *=     /=     %=     +=     -=     >>=     <<=     &=     ^=     |= 
15.    ,

9 程序指向結果

  #include "stdio.h"
 
class A
{
public:
    virtual void Test()
    {
        printf("A test\n");
    }
};
class B: public A
{
public:
    void func()
    {
        Test();
    }
    virtual void Test()
    {
        printf("B test\n");
    }
};
class C: public B
{
public:
    virtual void Test()
    {
        printf("C test\n");
    }
};
void main()
{
    C c;
    ((B *)(&c))->func();
    ((B)c).func();
}

查考虛函數

kchenhao
查閱了各種資料,我來說一下我的看法吧:
(1)((B *)(&c))->func():編譯階段,系統發現B類型有一個非虛函數func,靜態綁定,相當B::func((B *)(&c)),傳入的this指針是B類型。在func內部調用this->Test(),由於Test是虛函數,動態綁定,通過虛函數表調用C::Test()。
(2)((B)c).func():強制類型轉換髮生對象切割,相當於用C初始化一個臨時對象Btemp,vptr指向B的虛函數表,等價於Btemp.func()。根據靜態綁定,調用B::func((B *)Btemp),在func內部調用this->Test(),Test是虛函數,動態綁定,通過虛函數表(注意此時的虛函數表是B)調用B::Test()。

10 由3 個“1”和 5 個“0”組成的 8 位二進制補碼,能表示的最小整數()
既然求最小整數,那肯定先想到負數,則最高位(符號位)一定爲1,原碼中肯定是1所在的位數越高,值越小,而補碼是由原碼取反加1得到的,則在補碼中1所在的位數一定要越低,即補碼爲1000 0011;由補碼求得原碼:1111 1101=-(64+32+16+8+4+1)=-125;
考查原碼、補碼、反碼概念及???

11 一張1024×640分辨率的圖片,假定每個像素用16位色彩表示,用位圖文件(bitmap)格式存儲,則這張圖片文件需要佔用多大的存儲空間_
102464016 bit = 102464016/8 B = 102464016/8/1024 KB = 1280KB

12 在32位系統中,下面程序打印結果爲()

#include<iostream>
using namespace std;

class A
{
char a[3];
public:
virtual void fun1(){};
};

class B : public virtual A
{
char b[3];
public:
virtual void fun2(){};
};

class C : public virtual B
{
char c[3];
public:
virtual void fun3(){};
};

int main ()
{
cout << sizeof(A) << endl;
cout << sizeof(B) << endl;
cout << sizeof(C) << endl;
return 0;
}

13代碼輸出,print已聲明

main(){     
    char str[]="Geneius";
    print (str);
} 
print(char *s){
  if(*s){
       print(++s);
       printf("%c",*s); 
}
}

有兩個知識點,一個是遞歸,相當於棧是FILO,另一個考察點是print(++s),指針先移動然後調用函數。

14 #if defined() 和#if !defined()指令簡寫#ifdef #ifndef

阿道夫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章