面试题
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.下面程序的输出结果为多少?
- void Func(char str_arg[100])
- {
- printf("%d\n",sizeof(str_arg));
- }
- int main(void)
- {
- char str[]="Hello";
- printf("%d\n",sizeof(str));
- printf("%d\n",strlen(str));
- char *p = str;
- printf("%d\n",sizeof(p));
- Func(str);
- }
输出结果为: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一样)。
大端模式
小端模式
以下两个语句的区别是:
- int *p1 = new int[10];
- 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.