关键词搜索

源码搜索 ×
×

笔试面试题目:一文搞定sizeof笔试面试题

发布2021-02-17浏览1938次

详情内容

在面试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.

相关技术文章

最新源码

下载排行榜

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载