【C语言进阶篇】之变量
char, short, int, long, float, double
可以加:char, short, int, long
🙅可以加:float, double
int *p1; //p1是一个指向int类型的指针
int const *p4; //p4和p2表示相同的意思,只是写法不同
数据类型 |
Windows |
Linux |
||
32位 |
64位 |
32位 |
64位 |
|
char |
1 |
1 |
1 |
1 |
short (int) |
2 |
2 |
2 |
2 |
int |
4 |
4 |
4 |
4 |
long (int) |
4 |
4 |
4 |
8 |
long long |
8 |
8 |
8 |
8 |
float |
4 |
4 |
4 |
4 |
double |
8 |
8 |
8 |
8 |
long double |
8 |
8 |
12 |
16 |
char* 指针类型 |
4 |
8 |
4 |
8 |
size_t |
4 |
8 |
4 |
8 |
Bool |
1 |
1 |
1 |
1 |
注:long long是C++的64位整型的基本类型,从C99开始引入这个概念, C++11官方正式标准如下:
long long - target type will have width of at least 64 bits.(since C++11)
如下代码在32位系统中的输出结果是()
void func(char acHello[])
{
printf(“%d”, sizeof(acHello));
return;
}
void main()
{
char acHello[]=”Hello”;
example(acHello);
return;
}
结果:4
在32位系统中,有如下代码:
char str[] = ”\\\\”;
char *p = str;
int n = 100;
则sizeof(str), sizeof(p), sizeof(n)分别是多少?
结果:4 4 4
补充:strlen(“\\\\”)=4,sizeof(“\\\\”)=5,你知道为什么吗?
int main()
{
short i = 65535;
printf("i=%d\n", i);
return 0;
}
结果:-1
【分析】:因为内存中65535存储内容的16进制表示为:0x0FFFF,将此值传递给16位的变量i时,i只能接受到0xFFFF;看见首位为1,编译器会认为i是个负值,至于负值的绝对值=源码取反(0x0000)+1 = 0x0001。因此最终输出-1。