久久久久无码精品,四川省少妇一级毛片,老老熟妇xxxxhd,人妻无码少妇一区二区

c++程序員面試題目

時(shí)間:2024-05-18 12:40:12 面試筆試 我要投稿
  • 相關(guān)推薦

c++程序員面試題目

  1.是不是一個(gè)父類寫了一個(gè)virtual 函數(shù),如果子類覆蓋它的函數(shù)不加virtual ,也能實(shí)現(xiàn)多態(tài)?

c++程序員面試題目

  virtual修飾符會(huì)被隱形繼承的。private 也被集成,只事派生類沒有訪問權(quán)限而已。virtual可加可不加。子類的空間里有父類的所有變量(static除外)。同一個(gè)函數(shù)只存在一個(gè)實(shí)體(inline除外)。子類覆蓋它的函數(shù)不加virtual ,也能實(shí)現(xiàn)多態(tài)。在子類的空間里,有父類的私有變量。私有變量不能直接訪問。

  --------------------------------------------------------------------------

  2.輸入一個(gè)字符串,將其逆序后輸出。(使用C++,不建議用偽碼)

  #include

  using namespace std;

  void main()

  {

  char a[50];memset(a,0,sizeof(a));

  int i=0,j;

  char t;

  cin.getline(a,50,'\n');

  for(i=0,j=strlen(a)-1;i<strlen(a) p="" 2;i++,j--)<="">

  {

  t=a[i];

  a[i]=a[j];

  a[j]=t;

  }

  cout<<a<<endl;< p="">

  }

  //第二種

  string str;

  cin>>str;

  str.replace;

  cout<<str;< p="">

  --------------------------------------------------------------------------

  3.請(qǐng)簡(jiǎn)單描述Windows內(nèi)存管理的方法。

  內(nèi)存管理是操作系統(tǒng)中的重要部分,兩三句話恐怕誰也說不清楚吧~~

  我先說個(gè)大概,希望能夠拋磚引玉吧

  當(dāng)程序運(yùn)行時(shí)需要從內(nèi)存中讀出這段程序的代碼。代碼的位置必須在物理內(nèi)存中才能被運(yùn)行,由于現(xiàn)在的操作系統(tǒng)中有非常多的程序運(yùn)行著,內(nèi)存中不能夠完全放下,所以引出了虛擬內(nèi)存的概念。把哪些不常用的程序片斷就放入虛擬內(nèi)存,當(dāng)需要用到它的時(shí)候在load入主存(物理內(nèi)存)中。這個(gè)就是內(nèi)存管理所要做的事。內(nèi)存管理還有另外一件事需要做:計(jì)算程序片段在主存中的物理位置,以便CPU調(diào)度。

  內(nèi)存管理有塊式管理,頁式管理,段式和段頁式管理。現(xiàn)在常用段頁式管理

  塊式管理:把主存分為一大塊、一大塊的,當(dāng)所需的程序片斷不在主存時(shí)就分配一塊主存空間,把程 序片斷l(xiāng)oad入主存,就算所需的程序片度只有幾個(gè)字節(jié)也只能把這一塊分配給它。這樣會(huì)造成很大的浪費(fèi),平均浪費(fèi)了50%的內(nèi)存空間,但時(shí)易于管理。

  頁式管理:把主存分為一頁一頁的,每一頁的空間要比一塊一塊的空間小很多,顯然這種方法的空間利用率要比塊式管理高很多。

  段式管理:把主存分為一段一段的,每一段的空間又要比一頁一頁的空間小很多,這種方法在空間利用率上又比頁式管理高很多,但是也有另外一個(gè)缺點(diǎn)。一個(gè)程序片斷可能會(huì)被分為幾十段,這樣很多時(shí)間就會(huì)被浪費(fèi)在計(jì)算每一段的物理地址上(計(jì)算機(jī)最耗時(shí)間的大家都知道是I/O吧)。

  段頁式管理:結(jié)合了段式管理和頁式管理的優(yōu)點(diǎn)。把主存分為若干頁,每一頁又分為若干段。好處就很明顯,不用我多說了吧。

  各種內(nèi)存管理都有它自己的方法來計(jì)算出程序片斷在主存中的物理地址,其實(shí)都很相似。

  這只是一個(gè)大概而已,不足以說明內(nèi)存管理的皮毛。無論哪一本操作系統(tǒng)書上都有詳細(xì)的講解

  --------------------------------------------------------------------------

  4.

  #include "stdafx.h"

  #define SQR(X) X*X

  int main(int argc, char* argv[])

  {

  int a = 10;

  int k = 2;

  int m = 1;

  a /= SQR(k+m)/SQR(k+m);

  printf("%d\n",a);

  return 0;

  }

  這道題目的結(jié)果是什么啊?

  define 只是定義而已,在編擇時(shí)只是簡(jiǎn)單代換X*X而已,并不經(jīng)過算術(shù)法則的

  a /= (k+m)*(k+m)/(k+m)*(k+m);

  =>a /= (k+m)*1*(k+m);

  =>a = a/9;

  =>a = 1;

  PS:經(jīng)過本人驗(yàn)證,雖然結(jié)果一樣,但是應(yīng)該不是這樣運(yùn)算的,應(yīng)該是a/=k+m*k+m/k+m*k+m;

  因?yàn)镾QR(k+m)/SQR(k+m)的值是7,而不是9。

  --------------------------------------------------------------------------

  5.

  const 符號(hào)常量;

  (1)const char *p

  (2)char const *p

  (3)char * const p

  說明上面三種描述的區(qū)別;

  如果const位于星號(hào)的左側(cè),則const就是用來修飾指針?biāo)赶虻淖兞,即指針指向(yàn)槌A?

  如果const位于星號(hào)的右側(cè),const就是修飾指針本身,即指針本身是常量。

  (1)const char *p

  一個(gè)指向char類型的const對(duì)象指針,p不是常量,我們可以修改p的值,使其指向不同的char,但是不能改變它指向非char對(duì)象,如:

  const char *p;

  char c1='a';

  char c2='b';

  p=&c1;//ok

  p=&c2;//ok

  *p=c1;//error

  (2)char const *p

  (3)char * const p

  這兩個(gè)好象是一樣的,此時(shí)*p可以修改,而p不能修改。

  (4)const char * const p

  這種是地址及指向?qū)ο蠖疾荒苄薷摹?/p>

  --------------------------------------------------------------------------

  6.下面是C語言中兩種if語句判斷方式。請(qǐng)問哪種寫法更好?為什么?

  int n;

  if (n == 10) // 第一種判斷方式

  if (10 == n) // 第二種判斷方式

  如果少了個(gè)=號(hào),編譯時(shí)就會(huì)報(bào)錯(cuò),減少了出錯(cuò)的可能行,可以檢測(cè)出是否少了=

  --------------------------------------------------------------------------

  7.下面的代碼有什么問題?

  void DoSomeThing(...)

  {

  char* p;

  ...

  p = malloc(1024); // 分配1K的空間

  if (NULL == p)

  return;

  ...

  p = realloc(p, 2048); // 空間不夠,重新分配到2K

  if (NULL == p)

  return;

  ...

  }

  A:

  p = malloc(1024); 應(yīng)該寫成: p = (char *) malloc(1024);

  沒有釋放p的空間,造成內(nèi)存泄漏。

  --------------------------------------------------------------------------

  8.下面的代碼有什么問題?并請(qǐng)給出正確的寫法。

  void DoSomeThing(char* p)

  {

  char str[16];

  int n;

  assert(NULL != p);

  sscanf(p, "%s%d", str, n);

  if (0 == strcmp(str, "something"))

  {

  ...

  }

  }

  A:

  sscanf(p, "%s%d", str, n); 這句該寫成: sscanf(p, "%s%d", str, &n);

  --------------------------------------------------------------------------

  9.下面代碼有什么錯(cuò)誤?

  Void test1()

  {

  char string[10];

  char *str1="0123456789";

  strcpy(string, str1);

  }

  數(shù)組越界

  --------------------------------------------------------------------------

  10.下面代碼有什么問題?

  Void test2()

  {

  char string[10], str1[10];

  for(i=0; i<10;i++)

  {

  str1[i] ='a';

  }

  strcpy(string, str1);

  }

  數(shù)組越界

  --------------------------------------------------------------------------

  11.下面代碼有什么問題?

  Void test3(char* str1)

  {

  char string[10];

  if(strlen(str1)<=10)

  {

  strcpy(string, str1);

  }

  }

  ==數(shù)組越界

  ==strcpy拷貝的結(jié)束標(biāo)志是查找字符串中的\0 因此如果字符串中沒有遇到\0的話 會(huì)一直復(fù)制,直到遇到\0,上面的123都因此產(chǎn)生越界的情況

  建議使用 strncpy 和 memcpy

  --------------------------------------------------------------------------

  12.下面代碼有什么問題?

  #define MAX_SRM 256

  DSN get_SRM_no()

  {

  static int SRM_no; //是不是這里沒賦初值?

  int I;

  for(I=0;I<max_srm;i++,srm_no++)< p="">

  {

  SRM_no %= MAX_SRM;

  if(MY_SRM.state==IDLE)

  {

  break;

  }

  }

  if(I>=MAX_SRM)

  return (NULL_SRM);

  else

  return SRM_no;

  }

  系統(tǒng)會(huì)初始化static int變量為0,但該值會(huì)一直保存,所謂的不可重入...

  --------------------------------------------------------------------------

  13.寫出運(yùn)行結(jié)果:

  {// test1

  char str[] = "world"; cout << sizeof(str) << ": ";

  char *p = str; cout << sizeof(p) << ": ";

  char i = 10; cout << sizeof(i) << ": ";

  void *pp = malloc(10); cout << sizeof(p) << endl;

  }

  6:4:1:4

  --------------------------------------------------------------------------

  14.寫出運(yùn)行結(jié)果:

  {// test2

  union V {

  struct X {

  unsigned char s1:2;

  unsigned char s2:3;

  unsigned char s3:3;

  } x;

  unsigned char c;

  } v;

  v.c = 100;

  printf("%d", v.x.s3);

  }

  3

  --------------------------------------------------------------------------

  15.用C++寫個(gè)程序,如何判斷一個(gè)操作系統(tǒng)是16位還是32位的?不能用sizeof()函數(shù)

  A1:

  16位的系統(tǒng)下,

  int i = 65536;

  cout << i; // 輸出0;

  int i = 65535;

  cout << i; // 輸出-1;

  32位的系統(tǒng)下,

  int i = 65536;

  cout << i; // 輸出65536;

  int i = 65535;

  cout << i; // 輸出65535;

  A2:

  int a = ~0;

  if( a>65536 )

  {

  cout<<"32 bit"<<endl;< p="">

  }

  else

  {

  cout<<"16 bit"<<endl;< p="">

  }

  --------------------------------------------------------------------------

  16.C和C++有什么不同?

  從機(jī)制上:c是面向過程的(但c也可以編寫面向?qū)ο蟮某绦?;c++是面向?qū)ο蟮模峁┝祟。但是?/p>

  c++編寫面向?qū)ο蟮某绦虮萩容易

  從適用的方向:c適合要求代碼體積小的,效率高的場(chǎng)合,如嵌入式;c++適合更上層的,復(fù)雜的; llinux核心大部分是c寫的,因?yàn)樗窍到y(tǒng)軟件,效率要求極高。

  從名稱上也可以看出,c++比c多了+,說明c++是c的超集;那為什么不叫c+而叫c++呢,是因?yàn)閏++比

  c來說擴(kuò)充的東西太多了,所以就在c后面放上兩個(gè)+;于是就成了c++

  C語言是結(jié)構(gòu)化編程語言,C++是面向?qū)ο缶幊陶Z言。

  C++側(cè)重于對(duì)象而不是過程,側(cè)重于類的設(shè)計(jì)而不是邏輯的設(shè)計(jì)。

  --------------------------------------------------------------------------

  17.在不用第三方參數(shù)的情況下,交換兩個(gè)參數(shù)的值

  #include

  void main()

  {

  int i=60;

  int j=50;

  i=i+j;

  j=i-j;

  i=i-j;

  printf("i=%d\n",i);

  printf("j=%d\n",j);

  }

  方法二:

  i^=j;

  j^=i;

  i^=j;

  方法三:

  // 用加減實(shí)現(xiàn),而且不會(huì)溢出

  a = a+b-(b=a)

  --------------------------------------------------------------------------

  18.有關(guān)位域的面試題(為什么輸出的是一個(gè)奇怪的字符)

  a.t = 'b';效果相當(dāng)于 a.t= 'b' & 0xf;

  'b' --> 01100010

  'b' & 0xf -->>00000010

  所以輸出Ascii碼為2的特殊字符

  char t:4;就是4bit的字符變量,同樣

  unsigned short i:8;就是8bit的無符號(hào)短整形變量


【c++程序員面試題目】相關(guān)文章:

C++工程師筆試題目11-25

C++程序員求職信11-21

C++程序員求職信范文11-21

電話面試 題目11-20

海信面試英語題目06-15

寶潔面試題目09-30

面試的測(cè)試智力的常規(guī)題目!11-20

517昆明CD面試 面試題目11-20

小升初面試筆試及面試題目11-21

嘉士伯電話面試 面試題目分享11-21