笔试题1

来源:互联网 发布:js跳转页面 开新窗口 编辑:程序博客网 时间:2024/06/06 14:11

1.写输出结果

 char X[] = "AB";

    char Y[] = { 'A','B'};

    cout << sizeof(X) << "|" << sizeof(Y) << endl;

    cout << strlen(X) << "|" << strlen(Y) << endl;

随机

 

2.找错误

.

结果:

GetMemory()函数返回一个指向栈区开辟的"指针",在函数结束前,p会讲其拷贝一份给无名临时对象,作为函数的返回值,系统释放,而此时的hello world 在栈区开辟的在函数结束之时就会被释放,在主函数中打印相当于p指向了一个已经被释放的空间,所以会出现乱码。

修改:此时的hello wrold 在字符串常量区,程序没有结束,该区的资源就不会被释放。

  这是一个前辈写的,非常详细    
  //main.cpp    
  int   a   =   0;   全局初始化区    
  char   *p1;   全局未初始化区    
  main()    
  {    
  int   b;   栈    
  char   s[]   =   "abc";   栈    
  char   *p2;   栈    
  char   *p3   =   "123456";   123456/0在常量区,p3在栈上。    
  static   int   c   =0;   全局(静态)初始化区    
  p1   =   (char   *)malloc(10);    
  p2   =   (char   *)malloc(20);    
  分配得来得10和20字节的区域就在堆区。    
  strcpy(p1,   "123456");   123456/0放在常量区,编译器可能会将它与p3所指向的"123456"  
  优化成一个地方。    
  }

cons t int a     还在栈区开辟,const只是说明局部变量具有常性而已,不能被修改,

字符串常量也具有常性,而他在字符常量区。

3.分析题

数组和指针有时候可以相互操作,但是数组名不能作为左值,(必须是可修改的左值,唯一的地址,单地址里面 的东西可以改变) ++arr 错误,虽然不会产生临时空间,但是arr空间里的值具有常性,所以不能作为左值, arr++同理不能作为左值,还有一点他会产生临时空间,先保存arr的值,要正确输出的话还会产生新的空间,即数组名不能作为左值,进行自增运算符,指针可以自增自减

左值与右值:更深一层,可以将 L-value 的 L, 理解成 Location,表示定位,地址。将 R-value 的 R 理解成 Read,表示读取数据。现在的计算机数据放在内存。内存有两个很基本的属性:内存地址和内存里面放的数据。想象完全一样的箱子。每个箱子有个编号,用来区分到底是哪个箱子,箱子里面可以放东西。内存地址相当于箱子的编号,内存的数据,相当于箱子里面放的东西。

变量名编译之后,会映射成内存地址

 

区别i++,和++I 其中i++不能作为左值,是因为产生临时空间,++I 可以作为左值,不会产生空间,并且空间里的值是可以修改的,不具备常性,故++i可以作为左值

4.分析题

运算符优先级:后置++ -- 有限级最高,下来[] () . -> ,然后前置++-- , 再* & , +-*/ 位移

基本的优先级需要记住:

指针最优,单目运算优于双目运算。如正负号。

先乘除(模),后加减。

先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7等价于 (1 << (3 + 2))&7.

逻辑运算最后计算。

 移位运算例如: 3 << 2,则是将数字3左移2位
  计算过程:
  3 << 2
  首先把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011,然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 1100,则转换为十进制是12。

其中数组名arr +1 相当于指向数组的第二个单元,

printf("%s\n", *--*++cpp + 3);//ER ,此时cpp已经指向cp数组第二 c+2 ,*(c+2)取值,++cpp, cp指向c的第二个元素 再—指向第一个元素,*一下,就是c数组第一个元素。第一个元素是char*指针,指向首元素,最后+3就是右移3位,%s输出,就是ER.

原创粉丝点击