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

来源:互联网 发布:网络营销软件免费下载 编辑:程序博客网 时间:2024/05/09 00:14

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

 

#include<iostream>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;};void fun1(char str[20]){cout << sizeof(str) << endl;}void fun2(char a[10][9]){cout << sizeof(a) << endl;}int main(){char *p1;cout << sizeof(p1) << endl; // 4int *p2 = new int[100]; cout << sizeof(p2) << endl; // 4delete [] p2;float *p3;cout << sizeof(p3) << endl; // 4double ******p4;cout << sizeof(p4) << endl; // 4char str[100] = "abcdefg";fun1(str); // 4  (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; // 9cout << strlen(str1) << endl; // 8char str2[] = "abcde0fg"; //(里面是字符'0',不等于'\0')cout << sizeof(str2) << endl; // 9cout << strlen(str2) << endl; // 8char str3[] = "abcde\0fg";  cout << sizeof(str3) << endl; // 9cout << strlen(str3) << endl; // 5char str4[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g'};cout << sizeof(str4) << endl; // 7cout << strlen(str4) << endl; // 13  (数值不确定)char str5[] = {'a', 'b', 'c', 'd', 'e', 'o', 'f', 'g'};cout << sizeof(str5) << endl; // 8cout << strlen(str5) << endl; // 21  (数值不确定)char str6[] = {'a', 'b', 'c', 'd', 'e', '0', 'f', 'g'};cout << sizeof(str6) << endl; // 8cout << strlen(str6) << endl; // 29  (数值不确定)char str7[] = {'a', 'b', 'c', 'd', 'e', '\0', 'f', 'g'};cout << sizeof(str7) << endl; // 8cout << strlen(str7) << endl; // 5char str8[] = {'a', 'b', 'c', 'd', 'e', 0, 'f', 'g'};cout << sizeof(str8) << endl; // 8cout << strlen(str8) << endl; // 5char str9[] = "";cout << sizeof(str9) << endl; // 1cout << strlen(str9) << endl; // 0char a[10][9];cout << sizeof(a) << endl; // 90    fun2(a); // 4  (fun2中的a为指针变量)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; // 4  (虚指针)cout << sizeof(K) << endl; // 4cout << sizeof(L) << endl; // 8  (虚指针)cout << sizeof(M) << endl; // 12 (虚指针)cout << sizeof(N) << endl; // 1  (静态成员变量不专属某一对象)cout << sizeof(O) << endl; // 4  (静态成员变量不专属某一对象)return 0;}