C++基础知识
定义在Class声明内的成员函数默认是inline函数
进制
问:假设在n进制下,等式240*12=2880成立,n值是()
A 19
B 18
C 17
D 16
E 15
F 以上都对
答:[2*(n^2)+4*(n^1)] * [1*n+2]=2*(n^3)+8*(n^2)+8*(n^1),化简后为恒等式,故n为任意值,选F。
sizeof
32位编译器
char 1个字节
char* 4个字节
int 4个字节
short int 2个字节
long 4个字节
float 4个字节
double 8个字节
64位编译器
char* 8个字节
long 8个字节
sizeof(struct)
struct的对齐原则整体对齐:总内存为其最宽成员的整数倍
局部对齐:每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍
struct st {
int *p;
int i;
char a;
};
int sz=sizeof(struct st);
如下C程序,在64位处理器上运行后sz的值是什么?
A 24
B 20
C 16
D 13
答:
局部对齐
64位时,指针占8字节,所以*p占8字节;int占4字节,且8是4的倍数,所以i占4字节;char占1字节,且12
是1的倍数,所以a占1字节;故,共占13字节。
整体对齐
成员中指针占用字节数最多,为8字节,所以struct整体占用字节数因为8的倍数,13 → 16。
指针
请问输出什么?
main() {
char*a[]={"work","at","alibaba"};
char**pa=a;
pa++;
printf("%s",*pa);
}
32位编译器
char 1个字节
char* 4个字节
int 4个字节
short int 2个字节
long 4个字节
float 4个字节
double 8个字节
64位编译器
char* 8个字节
long 8个字节
sizeof(struct)
对齐原则
总内存为其最宽成员的整数倍
每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍