面试题

6、已知一个线性表(38,25,74,63,52,48),假定采用散列函数h(key) = key%7计算散列地址,并散列存储在散列表A【0....6】中,若采用线性探测方法解决冲突,则在该散列表上进行等概率成功查找的平均查找长度为(C

A、1.5                  B、1.7                           C、2.0                       D、2.3

1/6*(1+3+1+1+2+4)= 2.0

 

9.下面程序的输出结果为多少?

  1. void Func(char str_arg[100])  
  2. {  
  3.     printf("%d\n",sizeof(str_arg));  
  4. }  
  5.   
  6. int main(void)  
  7. {  
  8.     char str[]="Hello";  
  9.     printf("%d\n",sizeof(str));  
  10.     printf("%d\n",strlen(str));  
  11.     char *p = str;  
  12.     printf("%d\n",sizeof(p));  
  13.     Func(str);  
  14. }  

输出结果为:6   5     4      4

对字符串进行sizeof操作的时候,会把字符串的结束符“\0”计算进去的,进行strlen操作求字符串的长度的时候,不计算\0的。

数组作为函数参数传递的时候,已经退化为指针了,Func函数的参数str_arg只是表示一个指针,那个100不起任何作用的。

 sizeof(p)是计算指针p的长度,指针长度是4个字节。

 

??2、如果X大于0并小于65536,用移位法计算X乘以255的值为:-X+X<<8

X<<8-X是不对的,X<<8,已经把X的值改变了(订正:X<<8是个临时变量,不会改变X的值,就像a+1不会改变a一样)。

 

大端模式

所谓的大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
0x1234  12为数据高位,34为数据低位。

小端模式

所谓的小端模式,是指数据的高位保存在内存的高地址中,而数 据的低位保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
 
我们常用的X86结构是小端模式.
一般来说,大部分用户的操作系统(如windows, FreeBsd,Linux)是小端模式的。少部分,如MAC OS,是大端模式 的。
 

以下两个语句的区别是:

  1. int *p1 = new int[10];  
  2. int *p2 = new int[10](); 
前者只进行了内存分配并没有进行初始化,而后者不仅仅、进行了内存分配同时进行了初始化指针。你可以单步看看的。前一个指针未知,后一个清零的。


C和C++怎样分配和释放内存,区别是什么

    C: malloc  free   //函数  calloc() 会初始化  realloc 会重置大小

    C++:   new  delete  //运算符

     C++中内存分为5个区: 堆 栈 全局/静态区 常量区 自由存储区(也有说代码区)

    malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可以用于申请动态内存和释放内存。

    对于非内部数据类型对象而言,光用malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于

    malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free.

posted @ 2014-03-26 19:32  DET橙  阅读(148)  评论(0编辑  收藏  举报