2013年海康威视校园招聘笔试题(2)

时间:2017-05-17 笔试题目 我要投稿

  8、以下程序有什么问题,请指出。

  char* GetMem()

  {

  char p[] = "hello";

  return p;

  }

  void test_get_mem()

  {

  char *p = GetMem();

  printf(p);

  return ;

  }

  char* GetMem()

  {

  char p[] = "hello";

  return p;

  }

  void test_get_mem()

  {

  char *p = GetMem();

  printf(p);

  return ;

  }GetMem函数中的p是一个在栈上的局部变量,当函数运行结束的时候,栈上的内容会自动释放的,此处返回的值有可能会成为一个野指针,会出现一个意想不到的结果。

  9、请写出strcpy 和 memcpy 的区别(5分)

  答:strcpy和memcpy都是标准C库函数,它们有下面的特点。

  strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。

  strcpy函数的原型是:char* strcpy(char* dest, const char* src);

  memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。

  memcpy函数的原型是:void *memcpy( void *dest, const void *src, size_t count );

  strcpy和memcpy主要有以下3方面的区别。

  1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。

  2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。

  3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。

  10、请写出以下程序的输出结果

  class Base

  {

  public:

  Base()

  {

  printf("I am Base()\n");

  }

  virtual ~Base()

  {

  printf("I am ~Base()\n");

  }

  public:

  virtual void SayHello()

  {

  printf("Hello Base\n");

  }

  void SayWorld()

  {

  printf("World Base\n");

  }

  };

  class Derived : public Base

  {

  public:

  Derived()

  {

  printf("I am Derived()\n");

  }

  virtual ~Derived()

  {

  printf("I am ~Derived()\n");

  }

  public:

  void SayHello();

  void SayWorld();

  };

  void Derived::SayHello()

  {

  printf("Hello Derived\n");

  }

  void Derived::SayWorld()

  {

  printf("World Derived\n");

  }

  int main(void)

  {

  Base *b1 = new Base;

  Base *b2 = new Derived;

  Derived *d = new Derived;

  b1->SayHello();

  b1->SayWorld();

  b2->SayHello();

  b2->SayWorld();

  d->SayHello();

  d->SayWorld();

  delete d;

  delete b2;

  delete b1;

  d= NULL;

  b2 = NULL;

  b1 = NULL;

  return 0;

  }

  class Base

  {

  public:

  Base()

  {

  printf("I am Base()\n");

  }

  virtual ~Base()

  {

  printf("I am ~Base()\n");

  }

  public:

  virtual void SayHello()

  {

  printf("Hello Base\n");

  }

  void SayWorld()

  {

  printf("World Base\n");

  }

  };

  class Derived : public Base

  {

  public:

  Derived()

  {

  printf("I am Derived()\n");

  }

  virtual ~Derived()

  {

  printf("I am ~Derived()\n");

  }

  public:

  void SayHello();

  void SayWorld();

  };

  void Derived::SayHello()

  {

  printf("Hello Derived\n");

  }

  void Derived::SayWorld()

  {

  printf("World Derived\n");

  }

  int main(void)

  {

  Base *b1 = new Base;

  Base *b2 = new Derived;

  Derived *d = new Derived;

  b1->SayHello();

  b1->SayWorld();

  b2->SayHello();

  b2->SayWorld();

  d->SayHello();

  d->SayWorld();

  delete d;

  delete b2;

  delete b1;

  d= NULL;

  b2 = NULL;

  b1 = NULL;

  return 0;

  }输出结果:

  I am Base()

  I am Base()

  I am Derived()

  I am Base()

  I am Derived()

  Hello Base

  World Base

  Hello Derived

  World Base

  Hello Derived

  World Derived

  I am ~Derived()

  I am ~Base()

  I am ~Derived()

  I am ~Base()

  I am ~Base()

  11、阅读以下程序并给出执行结果

  class Bclass

  {

  public:

  Bclass(int i , int j)

  {

  x = i;

  y = j;

  }

  virtual int fun()

  {

  return 0;

  }

  protected:

  int x , y;

  };

  class lclass : public Bclass

  {

  public:

  lclass(int i , int j , int k) : Bclass(i , j)

  {

  z = k;

  }

  int fun()

  {

  return (x+y+z)/3;

  }

  private:

  int z;

  };

  int main(void)

  {

  lclass obj(2,4,10);

  Bclass p1 = obj;

  cout<

  Bclass &p2 = obj;

  cout<

  cout<

  Bclass *p3 = &obj;

  cout

  return 0;

  }

  class Bclass

  {

  public:

  Bclass(int i , int j)

  {

  x = i;

  y = j;

  }

  virtual int fun()

  {

  return 0;

  }

  protected:

  int x , y;

  };

  class lclass : public Bclass

  {

  public:

  lclass(int i , int j , int k) : Bclass(i , j)

  {

  z = k;

  }

  int fun()

  {

  return (x+y+z)/3;

  }

  private:

  int z;

  };

  int main(void)

  {

  lclass obj(2,4,10);

  Bclass p1 = obj;

  cout<

  Bclass &p2 = obj;

  cout<

  cout<

  Bclass *p3 = &obj;

  cout

  return 0;

  }输出结果:

  0

  5

  0

  5

  12、如何减少频繁分配内存(malloc或者new)造成的内存碎片?(10分)

  13、请写出strchr的实现(10分)

  函数功能:找出在字符串str中第一次出现字符ch的位置,找到就返回该字符位置的指针(也就是返回该字符在字符串中的地址的位置),找不到就返回空指针(就是NULL)

  const char* strchr(const char* str , char ch)

  const char* strchr(const char* str , char ch)

  {

  char *p = NULL;

  const char* s = str;

  for( ; *s != '\0' ; ++s)

  {

  if(*s == ch)

  {

  p = (char *)s;

  break;

  }

  }

  return p;

  }

  const char* strchr(const char* str , char ch)

  {

  char *p = NULL;

  const char* s = str;

  for( ; *s != '\0' ; ++s)

  {

  if(*s == ch)

  {

  p = (char *)s;

  break;

  }

  }

  return p;

  }

  14、请写出冒泡排序法算法(20分)

  void BubbleSort(int r[] , int n);

  void BubbleSort(int r[] , int n)

  {

  int i , j , temp;

  for(i = 0 ; i < n - 1 ; ++i)

  {

  for(j = 0 ; j < n-i-1 ; ++j)

  {

  if(r[j] > r[j + 1])

  {

  temp = r[j];

  r[j] = r[j + 1];

  r[j + 1] = temp;

  }

  }

  }

  }

  void BubbleSort(int r[] , int n)

  {

  int i , j , temp;

  for(i = 0 ; i < n - 1 ; ++i)

  {

  for(j = 0 ; j < n-i-1 ; ++j)

  {

  if(r[j] > r[j + 1])

  {

  temp = r[j];

  r[j] = r[j + 1];

  r[j + 1] = temp;

  }

  }

  }

  }

2013年海康威视校园招聘笔试题(2)相关推荐
热门推荐