C++基础面试题分享

  1,以下代码中的两个sizeof用法有问题吗?

  sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小。注意:数组名作为函数参数时,退化为指针。数组名作为sizeof()参数时,数组名不退化,因为sizeof不是函数。

  请问以下代码有什么问题

  int main()

  {

  char a;

  char *str = &a;

  strcpy(str,”hello”);

  printf(str);

  return 0;

  }

  没有为str分配内存空间,将会发生异常

  问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。

  Strcpy的在库函数string.h中,程序的主要程序在于越办进行内存读写导致程序崩溃。

  2,const char* s = “AAA”;

  Printf(“%s”,s);

  S[0] = ‘B’;

  Printf(“%s”,s);

  “AAA”是字符串常量,S是指针,指向这个字符串常量,所以声明s的时候就有问题。

  Const char* s =”AAA”,然后又因为是常量,所以对S[0]的赋值操作是不合法的。

  3,Char szstr[10];

  Strcpy(szstr,”0123456789″);

  产生什么结果?为什么?

  正常输出,长度不一样,会造成非法的OS,覆盖别的内容

  4,交换两个变量的值,不使用第三个变量。即a=3,b=5,交换之后a=5,b=3;

  两种解法,一种是用算术算法,一种是用^(异或)

  a = a+b;

  b = a-b;

  a = a-b;

  or

  a = a^b;//只能对int ,char

  b = a^b;

  a = a^b;

  or

  a ^= b ^=a;

  

本文已影响6827
上一篇:阿里巴巴集团面试问题精选 下一篇:Java Web工程师面试笔试题

相关文章推荐

|||||