面试积累

1.在函数外声明的变量和有静态存储类型的变量会自动付初值为0,没有静态存储类型的局部变量则是垃圾内容(malloc和realloc动态分配的内存可能是垃圾值。calloc分配的是全0)
2.a[i]=i++;  这样的语句不能工作。     原因:i在同一表达式的不同的地方被引用,会导致无意义的结果,无法判断a[i]中是旧值还是新值( 警告: ‘i’上的运算结果可能是未定义的)
3.(i+=j)+=k;     i+=j   返回的是一个复制   不是i,是个匿名变量(在c语言中是。  在c++中是返回的i)
4.i=1;     j=i++ + ++i + ++i;     不同编译器的结果不一样 (GNU中 先计算第一个+号两边的数,再对第三个数加) i=4,j=7
5.sizeof('a');     是4而不是1     原因: C 语言中的字符常数是 int 型, 因此 sizeof(’a’) 是 sizeof(int),
6.printf("%*d", width, x) 就能达到要求    等同于:  printf("%8d\n",x);


7.a^b的结果是什么?             答: a^b=|a-b|   异或相同位为0,不同位为1   按位相减的0,按位相减的绝对值为1

8.#include<iostream>
using namespace std;
int foo(int x)
 {
    int count =0;
    while(x)
     {
    count++;
    x=x&(x-1);
     }
    return count ;
 }
int main()
{
    cout << foo(9999)<<endl;
     return 0;
}
输出8
解:::::func函数的返回值是行参转化为二进制后包含1的数量,


9.int f(int x, int y)
{
    return (x&y)+((x^y)>>1);
}
x&y是表示取的是相同位,是x和y相同位的一半,x^y是x和y不同位,>>1是xy不同位除以二
和起来就是x和y和的一半


10.交换两个数字
      a=a+b;  b=a-b; a=a-b;               //a+b可能越界
      a=a^b;  b=a^b; a=a^b;    

11.#pragma pack(n)定义程序   数据的对齐方式    

12.const  与#define的区别   :    #define只是拷贝,没有类型检查的过程  const强制保护放在代码段里
13.字符串的操作  strcpy strlen strcat  strchr(串中查找给定字符的第一个匹配处)
strcmp    strerror(指向错误信息字符串的指针)   strncmp  strncpy   strset(将一个串中所有字符都设为制定字符)
strnlen



14.数据库中空值的处理 (空值处理函数)             nvl(par1,par2)            
               当par1的值为NULL,函数返回par2的值
15。三大范式
 第一范式 表中的字段不可再分
     第二范式  所有的非主属性必须完全依赖于主属性
                  表中的数据可以被唯一区分
     第三范式  在 第二范式的基础上消除了传递依赖

16.
静态成员函数与成员函数的区别,
   静态成员函数没有隐藏的this指针。
   静态成员函数不恩那个反问非静态的成员
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值