知识点
- 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
void example(char acWelcome[]){
printf("%d",sizeof(acWelcome));
return;
}
void main(){
char acWelcome[]="Welcome to Huawei Test";
example(acWelcome);
return;
}
例题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<int *>(p);
p1++;
p = reinterpret_cast<char *>(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++: 各平台下基本数据类型的字节长度