zoukankan      html  css  js  c++  java
  • 求职面试---复习笔记1

    1、字节对齐的细节与编译器相关,但一般而言,满足以下三个准则:

    (1)结构体变量的首地址能够被其最宽基本类型成员的大小所整除。(由于结构体的成员可以是复合类型,所以寻找最宽基本类型成员时,应当包括复合类型成员的子成员)

    (2)结构体每个成员相对于结构体首地址的偏移量(offset)都是该成员大小的整数倍,如有需要编译器会在成员之间加上填充字节。(确定复合类型成员的偏移位置时,则是将复合类型成员作为整体对待)

    (3)结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后填充字节。

    2、#define有哪些缺陷

    (1)无法进行类型检查

    (2)由于运算符优先级不同,使用宏的时候容易出现问题。确保的方法是所有的都加括号,例如#define ADD(a+b) a+b 应该写为#define ADD(a+b) ((a)+(b))

    (3)无法单步调试

    (4)会导致代码膨胀

    (5)C++中,使用宏无法操作类的私有数据成员

    3、常用宏,比较大小、两数的最大值、两数的最小值

    (1)#define MAX(a,b) (fabs((a)-(b))==((a)-(b))?(a):(b))

    (2)#define MIN(a,b) ((a) <= (b) ? (a):(b))

    4、如何判断一个变量是有符号数还是无符号数,有三种方法

    (1)采取取反操作

    (2)利用无符号数和有符号数相减的结果为无符号数这一特性

    (3)通过改变符号位判断。

    5、#define TRACE(S) (printf("%s ",#S),S)是什么意思?

    #进行宏字符串连接,在宏中把参数解释为字符串,不可以在语句中直接使用。

    #include <iostream>
    using namespace std;
    
    #define TRACE3(S)(printf("%s
    ",#S),S)
    
    int main()
    {
    	int a = 5;
    	int b = TRACE3(a);
    	cout << b <<endl;
    	const char *str = "hello";
    	char des[50];
    	strcpy(des,TRACE3(str));
    	printf("%s
    ",des);
    	return 0;
    }

    6、JAVA抽象类和接口的区别:点击打开链接

    关键句:抽象类表示“is a”的意图,接口表示“like a ”的意图~

    语法层面:抽象类不可实例化

    7、异或运算的性质:任何一个数字异或它自己都等于0。

    例子:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只有一次的数字。要求时间复杂度是O(n),空间复杂度为O(1)。

    8、如何使用宏求结构体的内存偏移地址?

    #define Offset(type,field) ((size_t)&((type*)0->field))
    9、如何使用宏求数组中有多少个元素?

    sizeof(array)/sizeof(array[0])
    10、如果不用sizeof,如何求int占用的字节数??

    #define MySizeof(Value) ((char*)(&Value+1)-(char*)(&Value))


  • 相关阅读:
    HDU-2067-小兔的棋盘
    HDU-1861-游船出租
    C语言笔记
    P1164 小A点菜
    P1028 数的计算
    P1217 [USACO1.5]回文质数 Prime Palindromes
    P1088 火星人
    P2392 kkksc03考前临时抱佛脚
    P3799 妖梦拼木棒
    First Step (ファーストステップ)
  • 原文地址:https://www.cnblogs.com/javaadu/p/11742647.html
Copyright © 2011-2022 走看看