C/C++ 数据长度

知识点

  • C/C++基本数据类型在各平台下的长度(所占字节)
  • 类所占字节(例题5)

基本数据类型

type 32位 64位
char 1 1
short 2 2
int 4 4
long 4 4
long int 4 4
long long 8 8
float 4 4
double 8 8
long double 8 8
bool 1 1
wchar_t 2 2
point 4 8
  • 通过指针大小,可以判定机器字长

  • 在类中,如果什么都没有,则类占用1个字节,一旦类中有其他的占用空间成员,则这1个字节就不在计算之内。
  • 成员函数不占内存
  • 虚函数表占4个字节
  • static类成员不算做对象内

相关函数

  • sizeof() 占用字节数
  • strlen() 字符串长度 不计算\0

例题1

unsigned char *p1;
unsigned long *p2;
p1=(unsigned char *)0x801000;
p2=(unsigned long *)0x810000;
  • 请问p1+5= 什么?p2+5= 什么?
  • 答案 801005 810014
  • 注意换成16进制

例题2

  • 在32位机器中,如下代码的输出?
void example(char acWelcome[]){
    printf("%d",sizeof(acWelcome));
    return;
}
void main(){
    char acWelcome[]="Welcome to Huawei Test";
    example(acWelcome);
    return;
}
  • 答案 4
  • 此时acWelcome只是一个指针

例题3

void Func(char str_arg[100])
{
       printf("%d\n",sizeof(str_arg));
}
int main(void)
{
     char str[]="Hello";
     printf("%d\n",sizeof(str));
    printf("%d\n",strlen(str));
    char*p=str;
    printf("%d\n",sizeof(p));
    Func(str);
}
  • 输出结果是?
  • 答案:6 5 4 4
  • 字符数组储存长度 字符的长度 指针 指针

例题4

  • 下面程序运行后的结果为:
char str[] = "glad to test something";
char *p = str;
p++;
int *p1 = reinterpret_cast(p);
p1++;
p = reinterpret_cast(p1); 
printf("result is %s\n", p);
  • 答案:result is to test something
  • reinterpret_cast函数用于重新设置指针类型,++运算自增原指针类型长度的距离

例题5

  • 若char是一字节,int是4字节,指针类型是4字节,代码如下:
class CTest
{
    public:
        CTest():m_chData(‘\0’),m_nData(0)
        {
        }
        virtual void mem_fun(){}
    private:
        char m_chData;
        int m_nData;
        static char s_chData;
};
char CTest::s_chData=’\0’;
  • (1)若按4字节对齐sizeof(CTest)的值是多少?(2)若按1字节对齐sizeof(CTest)的值是多少?
  • 答案:12 9
  • 注意对齐方法

参考

闲聊c/c++: 各平台下基本数据类型的字节长度

你可能感兴趣的:(C/C++ 数据长度)