在面试C/C++相关的岗位时,sizeof操作符几乎是必考内容,它能检验面试者的基本功,所以,只能全对,不能出错。
一起来看看,这些题目,你能全做对吗?说明:如下题目是基于64位平台。
1. sizeof(基本类型)
#include<iostream>#include<cstring>using namespace std;
void fun1(char str[20]){ cout << sizeof(str) << endl;}
void fun2(char a[10][9]){ cout << sizeof(a) << endl;}
int func3() { cout << "hello world" << endl; return 0;}
int main(){ cout << sizeof(int) << endl; // 4
cout << sizeof(long) << endl; // 8
int i = 0; cout << sizeof(++i) << endl; // 4 cout << i << endl; // 0, 注意不是1哦
cout << sizeof(func3()) << endl; // 4, 注意没有hello world打印哈
char *p1; cout << sizeof(p1) << endl; // 8
int *p2 = new int[100]; cout << sizeof(p2) << endl; // 8 delete [] p2;
float *p3; cout << sizeof(p3) << endl; // 8
double ******p4; cout << sizeof(p4) << endl; // 8
char str[100] = "abcdefg"; fun1(str); // 8 (fun1中的形参str是指针变量) cout << sizeof(str) << endl; // 100 (str的容量为100) cout << sizeof(*str) << endl; // 1 (*str是一个字符数据) cout << strlen(str) << endl; // 7 (字符串str的长度)
char str1[] = "abcdeofg"; // (里面是字符'o') cout << sizeof(str1) << endl; // 9 cout << strlen(str1) << endl; // 8
char str2[] = "abcde0fg"; // (里面是字符'0',不等于'\0') cout << sizeof(str2) << endl; // 9 cout << strlen(str2) << endl; // 8
char str3[] = "abcde\0fg"; cout << sizeof(str3) << endl; // 9 cout << strlen(str3) << endl; // 5
char str4[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g'}; cout << sizeof(str4) << endl; // 7 cout << strlen(str4) << endl; // 7 (数值不确定)
char str5[] = {'a', 'b', 'c', 'd', 'e', 'o', 'f', 'g'}; cout << sizeof(str5) << endl; // 8 cout << strlen(str5) << endl; // 13 (数值不确定)
char str6[] = {'a', 'b', 'c', 'd', 'e', '0', 'f', 'g'}; cout << sizeof(str6) << endl; // 8 cout << strlen(str6) << endl; // 21 (数值不确定)
char str7[] = {'a', 'b', 'c', 'd', 'e', '\0', 'f', 'g'}; cout << sizeof(str7) << endl; // 8 cout << strlen(str7) << endl; // 5
char str8[] = {'a', 'b', 'c', 'd', 'e', 0, 'f', 'g'}; cout << sizeof(str8) << endl; // 8 cout << strlen(str8) << endl; // 5
char str9[] = ""; cout << sizeof(str9) << endl; // 1 cout << strlen(str9) << endl; // 0 char a[10][9]; cout << sizeof(a) << endl; // 90 fun2(a); // 8 (fun2中的a为指针变量)
return 0;}
请问,有没有全对呢?如果全对了,那么恭喜你,说明基础还可以,请继续看。
2. sizeof(复合类型)
#include<iostream>#include<cstring>using namespace std;
struct A {};
struct B{ char c; int i;};
struct C{ int i; char c;};
struct D{ char c1; char c2; int i;};
struct E{ int i; char c1; char c2;};
struct F{ char c1; int i; char c2;};
union G{ char c1; int i; char c2; double d;};
class H{};
class I{private: int i;};
class J{public: virtual void display();};
class K{private: int i;public: void display();};
class L{private: int i;public: virtual void display();};
class M{private: int i; int j;public: virtual void display();};
class N{private: static int i;};
class O{private: static int i; int j;};
int main(){ cout << sizeof(A) << endl; // 1 (编译器实现) cout << sizeof(B) << endl; // 8 (内存对齐) cout << sizeof(C) << endl; // 8 (内存对齐) cout << sizeof(D) << endl; // 8 (内存对齐) cout << sizeof(E) << endl; // 8 (内存对齐) cout << sizeof(F) << endl; // 12 (内存对齐)
cout << sizeof(G) << endl; // 8 (内存共用)
cout << sizeof(H) << endl; // 1 (编译器实现) cout << sizeof(I) << endl; // 4 cout << sizeof(J) << endl; // 8 (虚指针) cout << sizeof(K) << endl; // 4 cout << sizeof(L) << endl; // 16 (虚指针) 对比一下sizeof(M) cout << sizeof(M) << endl; // 16 (虚指针) 对比一下sizeof(L)
cout << sizeof(N) << endl; // 1 (静态成员变量不专属某一对象) cout << sizeof(O) << endl; // 4 (静态成员变量不专属某一对象)
return 0;}
那么,这次是否全对了呢?如果都做对了,给自己鼓个掌吧。
sizeof还是有点小小难度的,欢迎在留言区讨论。下次在笔试面试中,直接秒杀。祝大家拿到心满意足的offer.






![战神引擎传奇手游【1.76盛战传奇免授权版[摸摸登陆器]】最新整理Win系复古服务端+安卓苹果双端+GM授权物品后台+详细搭建教程](https://cdn.jxasp.com:9143/image/20251106/1B4E8594B3BEB90E8601D63A8A39CB0B.jpg)













