亚洲免费人人妻人人,cao78在线视频,福建一级毛片,91精品视频免费观看,高清另类图片操逼,日本特黄特色大片免费看,超碰欧美人人澡曰曰澡夜夜泛

C++經(jīng)典面試問題

時(shí)間:2024-09-15 07:43:43 資料大全 我要投稿
  • 相關(guān)推薦

C++經(jīng)典面試問題

  C++經(jīng)典面試問題分享

C++經(jīng)典面試問題

  1,關(guān)于動(dòng)態(tài)申請(qǐng)內(nèi)存

  答:內(nèi)存分配方式三種:

  (1)從靜態(tài)存儲(chǔ)區(qū)域分配:內(nèi)存在程序編譯的時(shí)候就已經(jīng)分配好,這塊內(nèi)存在程序的整個(gè)運(yùn)行期間都存在,

C++經(jīng)典面試問題

。

  全局變量,static變量。

  (2)在棧上創(chuàng)建:在執(zhí)行函數(shù)時(shí),函數(shù)內(nèi)局部變量的存儲(chǔ)單元都可以在棧上創(chuàng)建,

  函數(shù)執(zhí)行結(jié)束時(shí)這些存儲(chǔ)單元自動(dòng)被釋放。

  棧內(nèi)存分配運(yùn)算內(nèi)置于處理器的指令集中,效率很高,但是分配的內(nèi)存容量有限。

  (3)用malloc或new申請(qǐng)內(nèi)存之后,應(yīng)該立即檢查指針值是否為NULL.防止使用指針值為NULL的內(nèi)存,

  不要忘記為數(shù)組和動(dòng)態(tài)內(nèi)存賦初值。防止將未被初始化的內(nèi)存作為右值使用。避免數(shù)組或指針的下標(biāo)越界,

  特別要當(dāng)心發(fā)生“多1”或者“少1”操作。動(dòng)態(tài)內(nèi)存的申請(qǐng)與釋放必須配對(duì),防止內(nèi)存泄漏。

  用free或delete釋放了內(nèi)存之后,立即將指針設(shè)置為NULL,防止產(chǎn)生“野指針”。從堆上分配,亦稱動(dòng)態(tài)內(nèi)存分配。

  程序在運(yùn)行的時(shí)候用malloc或new申請(qǐng)任意多少的內(nèi)存,程序員自己負(fù)責(zé)在何時(shí)用free或delete釋放內(nèi)存。

  動(dòng)態(tài)內(nèi)存的生存期由程序員決定,使用非常靈活。(int *pArray; int MyArray[6]; pArray = &MyArray[0];)

  如果在申請(qǐng)動(dòng)態(tài)內(nèi)存時(shí)找不到足夠大的內(nèi)存塊,malloc和new將返回NULL指針,

  判斷指針是否為NULL,如果是則馬上用return語句終止本函數(shù),

  或者馬上用exit(1)終止整個(gè)程序的運(yùn)行,為new和malloc設(shè)置異常處理函數(shù)。

  2,C++指針攻破

  答案:指針是一個(gè)變量,專門存放內(nèi)存地址,特點(diǎn)是能訪問所指向的內(nèi)存

  指針本身占據(jù)了4個(gè)字節(jié)的長度

  int **ptr; //指針的類型是 int **

  int (*ptr)[3]; //指針的類型是 int(*)[3]

  int *(*ptr)[4]; //指針的類型是 int *(*)[4]

  ptr++:指針ptr的值加上了sizeof(int)

  ptr+=5:將指針ptr的值加上5*sizeof(int)

  指針的賦值:

  把一個(gè)變量的地址賦予指向相同數(shù)據(jù)類型的指針變量( int a; int *ip; ip=&a; )

  把一個(gè)指針變量的值賦予指向相同類型變量的另一個(gè)指針變量(int a; int *pa=&a; int *pb; pb=pa; )

  把數(shù)組的首地址賦予指向數(shù)組的指針變量(int a[5],*pa; pa=a; 也可寫為:pa=&a[0];)

  如果給指針加1或減1 ,實(shí)際上是加上或減去指針?biāo)赶虻臄?shù)據(jù)類型大小。

  當(dāng)給指針加上一個(gè)整數(shù)值或減去一個(gè)整數(shù)值時(shí),表達(dá)式返回一個(gè)新地址。

  相同類型的兩個(gè)指針可以相減,減后返回的整數(shù)代表兩個(gè)地址間該類型的實(shí)例個(gè)數(shù)。

  int ** cc=new (int*)[10]; 聲明一個(gè)10個(gè)元素的數(shù)組,數(shù)組每個(gè)元素都是一個(gè)int *指針,

  每個(gè)元素還可以單獨(dú)申請(qǐng)空間,因?yàn)閏c的類型是int*型的指針,所以你要在堆里申請(qǐng)的話就要用int *來申請(qǐng);

  int ** a= new int * [2];     //申請(qǐng)兩個(gè)int * 型的空間

  a[0] = new int[4];        ////為a的第一個(gè)元素申請(qǐng)了4個(gè)int 型空間,a[0] 指向了此空間的首地址處

  a[1] = new int[3];        //為a的第二個(gè)元素又申請(qǐng)了3個(gè)int 型空間,a[1]指向了此空間首地址處

  指針數(shù)組初始化賦值:

  一維指針開辟空間:char *str;int *arr; scanf("%d",&N);

  str=(char*)malloc(sizeof(char)*N);

  arr=(int*)malloc(sizeof(int)*N);

  二維指針開辟空間:int **arr, i; scanf("%d%d",&row,&col);

  arr=(int**)malloc(sizeof(int)*row);

  for(i=0;i

  arr[i]=(int*)malloc(sizeof(int)*col);

  結(jié)構(gòu)體指針數(shù)組,例如typedef struct{ char x; int y; }Quan,*QQuan;

  定義一個(gè)結(jié)構(gòu)體指針數(shù)組如:QQuan a[MAX]

  for(i=0;i

  {

  a[i]=(QQuan)malloc(sizeof(Quan));

  memset(a[i],0,sizeof(Quan));

  }

  指針數(shù)組賦值

  float a[]={100,200,300,400,500};

  float *p[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};

  char *units[1000];

  char get_unit[250];

  for(int i=0;i

  scanf("%s", get_unit); strcpy(units[i],get_unit);}

  3,復(fù)雜指針解析:

  (1)int (*func)(int *p);

  (*func)()是一個(gè)函數(shù),func是一個(gè)指向這類函數(shù)的指針,就是一個(gè)函數(shù)指針,這類函數(shù)具有int*類型的形參,返回值類型是 int,

資料共享平臺(tái)

C++經(jīng)典面試問題》(http://m.msguai.com)。

  (2)int (*func)(int *p, int (*f)(int*));

  func是一個(gè)指向函數(shù)的指針,這類函數(shù)具有int *和int (*)(int*)這樣的形參。形參int (*f)(int*),f也是一個(gè)函數(shù)指針

  (3)int (*func[5])(int *p);

  func數(shù)組的元素是函數(shù)類型的指針,它所指向的函數(shù)具有int*類型的形參,返回值類型為int。

  (4)int (*(*func)[5])(int *p);

  func是一個(gè)指向數(shù)組的指針,這個(gè)數(shù)組的元素是函數(shù)指針,這些指針指向具有int*形參,返回值為int類型的函數(shù)。

  (5)int (*(*func)(int *p))[5];

  func是一個(gè)函數(shù)指針,這類函數(shù)具有int*類型的形參,返回值是指向數(shù)組的指針,所指向的數(shù)組的元素是具有5個(gè)int元素的數(shù)組。

  注意:

  需要聲明一個(gè)復(fù)雜指針時(shí),如果把整個(gè)聲明寫成上面所示的形式,對(duì)程序可讀性是一大損害。

  應(yīng)該用typedef來對(duì)聲明逐層,分解,增強(qiáng)可讀性,例如對(duì)于聲明:int (*(*func)(int *p))[5];

  這樣分解:typedef int (*PARA)[5]; typedef PARA (*func)(int *);

  例如:int (*(*func)[5][6])[7][8];

  func是一個(gè)指向數(shù)組的指針,這類數(shù)組的元素是一個(gè)具有5X6個(gè)int元素的二維數(shù)組,而這個(gè)二維數(shù)組的元素又是一個(gè)二維數(shù)組。

  typedef int (*PARA)[7][8];

  typedef PARA (*func)[5][6];

  例如:int (*(*(*func)(int *))[5])(int *);

  func是一個(gè)函數(shù)指針,這類函數(shù)的返回值是一個(gè)指向數(shù)組的指針,

  所指向數(shù)組的元素也是函數(shù)指針,指向的函數(shù)具有int*形參,返回值為int。

  typedef int (*PARA1)(int*);

  typedef PARA1 (*PARA2)[5];

  typedef PARA2 (*func)(int*);

  4,函數(shù)指針詳解

  答:函數(shù)指針是指向一個(gè)函數(shù)入口的指針

  一個(gè)函數(shù)指針只能指向一種類型的函數(shù),即具有相同的返回值和相同的參數(shù)的函數(shù)。

  函數(shù)指針數(shù)組定義:void(*fun[3])(void*); 相應(yīng)指向類A的成員函數(shù)的指針:void (A::*pmf)(char *, const char *);

  指向外部函數(shù)的指針:void (*pf)(char *, const char *); void strcpy(char * dest, const char * source); pf=strcpy;

【C++經(jīng)典面試問題】相關(guān)文章:

C++面試筆試題目07-16

幼師面試技巧面試問題及基本問題05-21

面試問題:英文面試中常見問題大全08-06

幼師面試技巧面試問題10-21

面試常問的問題10-15

面試應(yīng)注意的問題09-30

面試:情景性問題08-04

FACEBOOK面試問題09-01

美國面試問題10-12

家教面試問題08-17