C++筆試題

平時學術必須用Python多啊,但校招筆試繞不開語言基礎,非cs科班小弱臨陣整理些C++題備考。很弱很苦逼。。。php

1、指針html

1.二維數組指針數組

#include<stdio.h>
int main(int args,char ** argv)
{
        int map[3][3]={
                {1,2,3},
                {4,5,6},
                {7,8,9}
        };

        int **pMap=(int **)map;

        printf("%d\n",map);//數組的首地址
        printf("%d\n",*(map+1));//數組第二行首地址
        printf("%d\n",*map+1);//數組首行的第二列地址
        printf("%d\n",**(map+1));//第二行第一列數值
        printf("%d\n",*(*(map+1)+1));//第二行二列數值
        printf("%d\n",*(map+1)+1);//第二行二列地址
        printf("%d\n",pMap[4]);//數組中的第5個數
        printf("%d\n",&pMap[4]);//數組中的第4個數的地址


        return 0;
}

2. 引用和指針的區別安全

★相同點:函數

●都是地址的概念;ui

指針指向一塊內存,它的內容是所指內存的地址;而引用則是某塊內存的別名。spa

★不一樣點:.net

  1. 指針是一個實體,而引用僅是個別名;
  2. ●引用只能在定義時被初始化一次,以後不可變;指針可變;引用「從一而終」,指針能夠「見異思遷」;
  3. ●引用沒有const,指針有const,const的指針不可變;(具體指沒有int& const a這種形式,而const int& a是有     的,  前者指引用自己即別名不能夠改變,這是固然的,因此不須要這種形式,後者指引用所指的值不能夠改變)
  4. ●引用不能爲空,指針能夠爲空;
  5. ●「sizeof 引用」獲得的是所指向的變量(對象)的大小,而「sizeof 指針」獲得的是指針自己的大小;
  6. 指針和引用的自增(++)運算意義不同;
  7. ●引用是類型安全的,而指針不是 (引用比指針多了類型檢查

 

 

2、sizeof指針

1.常規
char str1[] = 「Hello」 ;
char str2[5] = {'H','e','l','l','o'};
char str3[6] = {'H','e','l','l','o','/0'};
char   *p1 = "Hello";
char *p2[]={"hello","world"};
int     n = 10;
int    *q = &n;

sizeof (str1 ) = 6    (自動加了'/0')  
strlen (str1 ) = 5    (字符串的長度)  
sizeof (str2 ) = 5     (字符數組的大小)
strlen (str2) = 未知 (該字符串缺乏結束符'/0')
sizeof (str3) = 6     (字符數組的大小)
strlen (str3) = 5    (該字符串的長度爲5)
sizeof ( p1 ) =   4    (p1是一個指針,大小爲4)
sizeof ( p2 ) =   8    (p2是長度爲2的字符串數組)
sizeof ( n ) =   4    (整型大小爲4)
sizeof ( q ) =   4    (q是一個指針,大小爲4)

2.動態分配內存
int *p = (int *)malloc( 100 );
sizeof ( p ) = 4      (p是一個指針,大小爲4)

3.函數參數
void Function1( char p[],int num ){
    sizeof ( p ) = 4 (數組在作爲函數參數時均化爲指針)
}
void Function2( int p[],int num ){
    sizeof ( p ) = 4 (數組在作爲函數參數時均化爲指針)
}

code

3、類和對象

四. static

1.static關鍵字,static全局變量與普通全局變量的區別,static局部變量與普通變量的區別,static函數與普通函數的區別

static全局變量與普通的全局變量有什麼區別:static全局變量只初使化一次,防止在其餘文件單元中被引用;

static局部變量和普通局部變量有什麼區別:static局部變量只被初始化一次,下一次依據上一次結果值;

static函數與普通函數有什麼區別:static函數在內存中只有一份,普通函數在每一個被調用中維持一份拷貝。

 

五. const

在C中,const主要用來修飾變量、函數參數。 const做用於變量時,表示該變量具備不可改變的屬性。固然,由這個屬性,咱們就能夠清楚地知道爲何const變量要在定義的時候初始化,由於,const變量一旦定義以後,就不能改變(固然,這不是絕對的)。 很經典的例子是const修飾指針,int a = 3; const int * p = &a; int const *p = &a; int * const p = &a; const int * const p = &a; 一個區分const究竟是修飾指針自己,仍是修飾所指向的內容的簡單的方法是看const位於*號的前仍是後。若是const位於*號前,則修飾指針指向的內容;若是位於*號後,則修飾指針。由const的本質屬性,咱們就能夠很容易地知道,const位於*號前,表示指針指向的內容不能修改,const 位於*號後,表示指針自己不能修改。若是有兩個const,則表示指針指向的內容和指針自己均不能修改。 const做用於函數參數時,由const的本質屬性,咱們很容易清楚該函數不能改變這個參數。固然,經常使用的是const指針做參數。 在C中,const的用法主要就是上面兩點。

在C++中,除了C中的用法外,還有如下一些用法。 const做用於類的成員,包括成員變量和成員函數。 const做用於成員變量時,咱們一樣能夠根據const的不可修改屬性,推論出該成員變量不可被改變。這就引出一個問題,const成員變量如何初始化?解決方法就是構造函數的初始化列表。咱們知道,C++中,通常經過成員函數來訪問成員變量的,而通常的成員函數是能夠改變成員變量的值的,又由於const成員變量是不能夠修改的,因此,咱們就明白了爲何非const成員函數不能訪問const成員變量了。 const做用於成員函數時,那麼咱們就能夠推斷出該函數不能修改爲員變量的值,包括const成員變量和非const成員變量。固然,咱們還能夠得出const成員函數不能夠調用非const成員函數,緣由很簡單,非const成員函數能夠修改爲員變量。

const做用於類的對象、指針或引用時,咱們依然能夠利用const的不可修改屬性,推斷出const對象、指針或引用是不能夠修改內部的成員變量的,所以,咱們就能夠得出const對象、指針或引用不能調用非const成員函數的結論了

 

4、虛函數

相關文章
相關標籤/搜索