现在的位置: 首页 > 综合 > 正文

C相关笔试题或者面试题中的概念以及技巧题1

2013年09月01日 ⁄ 综合 ⁄ 共 1097字 ⁄ 字号 评论关闭

计算2进制数中1的个数,主要用到m&(m-1)

 

交换a,b不用中间变量,用异或:a=a^b;b=a^b;a=a^b

 

sizeof不是函数,它是个类似宏定义的特殊关键字,只要是指针,大小就是4.

静态变量时存放在全局数据区的,而sizeof计算栈中分配的大小,是不会计算在内的。

sizeof(虚函数)(类)

class no_virtual
{
public:
      void fun1() const{}
      int    fun2() const { return a; }
private:
      int a;
}

class one_virtual
{
public:
      virtual void fun1() const{}
      int    fun2() const { return a; }
private:
      int a;
}

class two_virtual
{
public:
      virtual void fun1() const{}
      virtual int    fun2() const { return a; }
private:
      int a;
}

以上三个类中:
no_virtual没有虚函数,sizeof(no_virtual)=4,类no_virtual的长度就是其成员变量整型a的长度;
one_virtual有一个虚函数,sizeof(one_virtual)=8;
two_virtual有两个虚函数,sizeof(two_virtual)=8; 有一个虚函数和两个虚函数的类的长度没有区别,其实它们的长度就是no_virtual的长度加一个void指针的长度,它反映出,如果有一个或多个虚函数,编译器在这个结构中插入一个指针( V P T R)。在one_virtual 和two_virtual之间没有区别。这是因为V P T R指向一个存放地址的表,只需要一个指针,因为所有虚函数地址都包含在这个表中。

 

 

指针和引用:

int &reiv  这种写法是错误的,引用不能为空,必须同时初始化。

const double di  这种写法是错误的,const常量赋值时,必须同时初始化。

 

char c[]="hello world" 分配局部数组  对应内存中的栈

char *c ="hello world" 分配全局数组 对应内存中的全局区域 全局区域的值是不能进行修改的

 

scanf用法 ,注意里面的参数是输入数的地址,而不是输入数本身

scanf(格式控制,地址表列)

  int scanf(char *format[,argument,...]);

  “格式控制”的含义同printf函数;“地址表列”是由若干个地址组成的表列,可以是变量的地址,或字符串首地址。

抱歉!评论已关闭.