彻底弄清几乎每次必考的sizeof关键字

来源:互联网 发布:windows商店app 编辑:程序博客网 时间:2024/05/20 09:49

     下面看看几乎每次笔试都会碰到的sizeof关键字。

[cpp] view plaincopy
  1. #include<iostream>  
  2. using namespace std;  
  3.   
  4. struct A  
  5. {};  
  6.   
  7. struct B  
  8. {  
  9.     char c;  
  10.     int i;  
  11. };  
  12.   
  13. struct C  
  14. {  
  15.     int i;  
  16.     char c;  
  17. };  
  18.   
  19. struct D  
  20. {  
  21.     char c1;  
  22.     char c2;  
  23.     int i;  
  24. };  
  25.   
  26. struct E  
  27. {  
  28.     int i;  
  29.     char c1;  
  30.     char c2;  
  31. };  
  32.   
  33. struct F  
  34. {  
  35.     char c1;  
  36.     int i;  
  37.     char c2;  
  38. };  
  39.   
  40. union G  
  41. {  
  42.     char c1;  
  43.     int i;  
  44.     char c2;  
  45.     double d;  
  46. };  
  47.   
  48. class H  
  49. {};  
  50.   
  51. class I  
  52. {  
  53. private:  
  54.     int i;  
  55. };  
  56.   
  57. class J  
  58. {  
  59. public:  
  60.     virtual void display();  
  61. };  
  62.   
  63. class K  
  64. {  
  65. private:  
  66.     int i;  
  67. public:  
  68.     void display();  
  69. };  
  70.   
  71. class L  
  72. {  
  73. private:  
  74.     int i;  
  75. public:  
  76.     virtual void display();  
  77. };  
  78.   
  79. class M  
  80. {  
  81. private:  
  82.     int i;  
  83.     int j;  
  84. public:  
  85.     virtual void display();  
  86. };  
  87.   
  88. class N  
  89. {  
  90. private:  
  91.     static int i;  
  92. };  
  93.   
  94. class O  
  95. {  
  96. private:  
  97.     static int i;  
  98.     int j;  
  99. };  
  100.   
  101. void fun1(char str[20])  
  102. {  
  103.     cout << sizeof(str) << endl;  
  104. }  
  105.   
  106. void fun2(char a[10][9])  
  107. {  
  108.     cout << sizeof(a) << endl;  
  109. }  
  110.   
  111. int main()  
  112. {  
  113.     char *p1;  
  114.     cout << sizeof(p1) << endl; // 4  
  115.   
  116.     int *p2 = new int[100];   
  117.     cout << sizeof(p2) << endl; // 4  
  118.     delete [] p2;  
  119.   
  120.     float *p3;  
  121.     cout << sizeof(p3) << endl; // 4  
  122.   
  123.     double ******p4;  
  124.     cout << sizeof(p4) << endl; // 4  
  125.   
  126.   
  127.     char str[100] = "abcdefg";  
  128.     fun1(str); // 4  (fun1中的形参str是指针变量)  
  129.     cout << sizeof(str) << endl;  // 100  (str的容量为100)  
  130.     cout << sizeof(*str) << endl; // 1    (*str是一个字符数据)  
  131.     cout << strlen(str) << endl;  // 7    (字符串str的长度)  
  132.       
  133.     char str1[] = "abcdeofg"//(里面是字符'o')  
  134.     cout << sizeof(str1) << endl; // 9  
  135.     cout << strlen(str1) << endl; // 8  
  136.   
  137.     char str2[] = "abcde0fg"//(里面是字符'0',不等于'\0')  
  138.     cout << sizeof(str2) << endl; // 9  
  139.     cout << strlen(str2) << endl; // 8  
  140.   
  141.     char str3[] = "abcde\0fg";    
  142.     cout << sizeof(str3) << endl; // 9  
  143.     cout << strlen(str3) << endl; // 5  
  144.   
  145.     char str4[] = {'a''b''c''d''e''f''g'};  
  146.     cout << sizeof(str4) << endl; // 7  
  147.     cout << strlen(str4) << endl; // 13  (数值不确定)  
  148.   
  149.     char str5[] = {'a''b''c''d''e''o''f''g'};  
  150.     cout << sizeof(str5) << endl; // 8  
  151.     cout << strlen(str5) << endl; // 21  (数值不确定)  
  152.   
  153.     char str6[] = {'a''b''c''d''e''0''f''g'};  
  154.     cout << sizeof(str6) << endl; // 8  
  155.     cout << strlen(str6) << endl; // 29  (数值不确定)  
  156.   
  157.     char str7[] = {'a''b''c''d''e''\0''f''g'};  
  158.     cout << sizeof(str7) << endl; // 8  
  159.     cout << strlen(str7) << endl; // 5  
  160.   
  161.     char str8[] = {'a''b''c''d''e', 0, 'f''g'};  
  162.     cout << sizeof(str8) << endl; // 8  
  163.     cout << strlen(str8) << endl; // 5  
  164.   
  165.     char str9[] = "";  
  166.     cout << sizeof(str9) << endl; // 1  
  167.     cout << strlen(str9) << endl; // 0  
  168.   
  169.     char a[10][9];  
  170.     cout << sizeof(a) << endl; // 90  
  171.     fun2(a); // 4  (fun2中的a为指针变量)  
  172.   
  173.     cout << sizeof(A) << endl; // 1  (编译器实现)  
  174.     cout << sizeof(B) << endl; // 8  (内存对齐)  
  175.     cout << sizeof(C) << endl; // 8  (内存对齐)  
  176.     cout << sizeof(D) << endl; // 8  (内存对齐)  
  177.     cout << sizeof(E) << endl; // 8  (内存对齐)  
  178.     cout << sizeof(F) << endl; // 12 (内存对齐)  
  179.       
  180.     cout << sizeof(G) << endl; // 8  (内存共用)  
  181.   
  182.     cout << sizeof(H) << endl; // 1  (编译器实现)  
  183.     cout << sizeof(I) << endl; // 4     
  184.     cout << sizeof(J) << endl; // 4  (虚指针)  
  185.     cout << sizeof(K) << endl; // 4  
  186.     cout << sizeof(L) << endl; // 8  (虚指针)  
  187.     cout << sizeof(M) << endl; // 12 (虚指针)  
  188.   
  189.     cout << sizeof(N) << endl; // 1  (静态成员变量不专属某一对象)  
  190.     cout << sizeof(O) << endl; // 4  (静态成员变量不专属某一对象)  
  191.       
  192.     return 0;  
  193. }