c/c++面试题

来源:互联网 发布:淘宝怎么增加词的权重 编辑:程序博客网 时间:2024/06/05 19:03

    unsigned int aa = 6;
    int b = -20;
    if((aa+b) > 6)
        printf("kao");
    else

       printf("bu kao!");

是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。


/* 不反转链表的情况下,反向打印链表元素 */

void reverse_print(struct linknode *head)
{
if(head->next != NULL)
   reverse_print(head->next);
printf("%d ", head->data);

}

-----

/* 遍历原链表,逐个取出链表元素并插入新链表的表头,
   从而形成反转链表
*/
void reverse(struct linknode **head)
{
struct linknode *newhead, *p, *temp;
if(*head == NULL || (*head)->next == NULL)
   return;

newhead = NULL;
p = (*head); //p初始为头
while(p)
{
   temp = p->next;//先保存下一个地址
   p->next = newhead;//newhead不断作为next的右值,并且不断更新为p所指
   newhead = p;//并且不断更新为p所指向的地址
   p = temp; //p不断移动下一个位置,通过之前用tmp保存的next指针地址
}
*head = newhead;
}

p:慢慢向后移动;

tmp:每次都比p移动到最后位置

new每次比p慢一个位置,先作为右值赋值给->next,再作为左值跟上p的脚步(指向p的位置,然后p再移向tmp的位置,下个循环则tmp移动到p->next的位置)

http://wzw19191.blog.163.com/blog/static/1311354702009926105418420/


---

如何判断大端小端:

big-endianlittle-endian格式。在小端模式中,低位字节放在低地址,高位字节放在高地址;在大端模式中,低位字节放在高地址,高位字节放在低地址。

C语言中,不同于结构体,共用体(联合体)中的几种不同类型的变量存放在同一段内存单元中。利用这一特点,可以用联合体变量判断ARMx86环境下,存储系统是是大端还是小端模式。

#include "stdio.h"
int main()
{
  union w
 {
  int a;  //4 bytes
  char b; //1 byte
 } c;
  c.a=1;
  if (c.b==1)
  printf("It is Little_endian!\n");
  else
  printf("It is Big_endian!\n");
  return 1;
}
说明:
 在c中,联合体(共用体)的数据成员都是从低地址开始存放。
 若是小端模式,由低地址到高地址c.a存放为0x01 00 00 00c.b被赋值为0x01

  ————————————————————————————

   地址 0x00000000 0x00000001 0x00000002 0x00000003

   c.a  01         00         00         00

   c.b  01         00        

  ————————————————————————————  
 若是大端模式,由低地址到高地址c.a存放为0x00 00 00 01c.b被赋值为0x0

  ————————————————————————————

   地址 0x00000000 0x00000001 0x00000002 0x00000003

   c.a  00         00         00         01

   c.b  00         00                 

  ————————————————————————————  


 根据c.b的值的情况就可以判断cpu的模式了,现在XP环境下的intel CPU是小端模式

http://blog.sina.com.cn/huashibuliao 


回调函数:

回调成员函数应该注意什么:

调试的时候如何查看堆栈信息:bt,等gdb调试技巧

树的深度遍历:代码实现,注意你的代码风格

堆排序:

图的遍历方法:深度、广度

发布版与bug版的区别:1.调试信息 2.代码级别的优化

下列代码有错误吗:getMemory(char *p){ p = (char*)malloc(100);} main(){ char * p = NULL; getMemory(p); strcpy(p,"hello");}

  有,最主要一点是:p并没有被分配到空间,因为这属于指针拷贝;我们应该使用**双指针作为形参才ok.

二分排序

main之前之后执行什么

归并排序、

智力题、

江南雨烟、linfengtengfei、开源项目的研究、

矩阵等

delete[];会逐个调用每个元素的析构函数。 delete new malloc free的区别

进程与线程的区别

什么是多态

打牢基础,基础基础,练习不能放过,每一个都不能,身在小地方,牛逼了也是一般,想想在大地方还有很多像以上2位大神在奋斗着,得慢慢追啊。

对你的公司产品了解多少

会使用什么网络模型?采用什么样的机制

数据库建立索引的优点缺点:1.查找速度提高 2.数据更新则耗时

原创粉丝点击