C 面试题(施工中...)
地址转换问题
#include <iostream>
using namespace std;
int main() {
char test[8] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
int *test_p = (int *)test;
int a = test_p[0];
printf("ox%X", a);
return 0;
}
/*
ox4030201
*/
unsigned long几个字节
unsigned long
的大小(以字节为单位)取决于编译器和平台。在不同的系统和编译器中,unsigned long
的大小可能会有所不同。
在许多现代系统和编译器中,unsigned long
通常是 4 字节(32 位)或 8 字节(64 位)。但在某些旧的或特定的系统上,它可能是其他大小。
要确定特定编译器和平台上的 unsigned long
的大小,你可以使用 sizeof
运算符(在 C 或 C++ 中)。例如:
#include <stdio.h>
int main() {
printf("Size of unsigned long: %zu bytes\n", sizeof(unsigned long));
return 0;
}
运行上述代码将输出 unsigned long
在你的特定系统上的大小(以字节为单位)。
指针地址的使用
#include <iostream>
using namespace std;
struct Test {
int Num;
char *pcName;
short sDate;
char cha[2];
short sBa[4];
} *p;
int main() {
Test t;
p = (struct Test *)&t;
printf("sizeof(Test) = %d\n", sizeof(Test));
printf("%X\n", p);
printf("%X\n", p + 0x1);
printf("%X\n", (unsigned long*)p + 0x1);
printf("%X\n", (unsigned int*)p + 0x1);
return 0;
}
/*
sizeof(Test) = 32
61FE00
61FE20
61FE04
61FE04
*/
多用组合、少用继承
基于接口而非实现进行编程