概述
C/C++的数据类型解读
- 常用的字符类型
- 计算运存与内存地址
- 数据类型的含义
常用的字符类型
常用的类型包括布尔型(bool)、字符型(char)、整型(int)、浮点型(float)、双浮点型(double)、无类型(void)、宽字符型(wchar_t)
其所占字节长度及其数值范围如下图所示
图片引自 http://www.runoob.com/cplusplus/cpp-data-types.html
计算运存与内存地址
1、一般计算机的系统是32位,这个32位指的是cpu指一次性可处理的数据量是 232 个。
举个例子;
如果一个计算机系统是1位的,则一次性可处理2个数,即:
0,1
如果一个计算机系统是2位的,则一次性可处理4个数,即:
00,01,10,11
如果一个计算机系统是3位的,则一次性可处理8个数,即:
000,001,010,011
100,101,110,111
……
以此类推
如果一个计算机系统是32位的,则一次性可处理 232 个数,即:
0000 0000 0000 0000 0000 0000 0000 0000
至
1111 1111 1111 1111 1111 1111 1111 1111
那么这些数字表示的就是地址。
简单的说,一个32位系统将内存分割成 232 份,每份内存是一个字节大小(8个bite位)并按顺序排列,某一份内存的顺序号用这个32个二进制位来表示,这个32位的二进制数表示的就是地址。
这个32位的二进制数由于长度较大,所以通常用8个十六进制位来表示,即:
0x00000000至0x f f f f f f f f
所以,一般来说,一个地址指向一个字节长度的内存。
数据类型的含义
对于一个数据类型,本质上就是针对不同类型的内存布局及其相关的操作。
比如定义一个数组:
int arr [3]
其中,arr是变量名,计算机会给这个数组变量申请 3个int长度的内存长度(3*8个字节)。
对于数组来说,arr是数组的名字,也就是数组的首地址。如果执行以下代码:
1 #include <stdio.h>
2
3 int main()
4 {
5 int arr[3]={2,23,4};
6
7 printf("address=%p n",arr); //输出arr的值(地址)
8 printf("address=%p n",arr+1); //输出arr+1的值(地址)
9 printf("address_val=%d n",*arr); //输出arr指向的数组值
10 printf("address_val=%d n",*(arr+1)); //输出arr指向的数组值
11 return 0;
12 }
运行结果:
address=0xbfe06e08
address=0xbfe06e0c
address_val=2
address_val=23
以上代码证明以下结论:
1、arr代表arr[0]的地址,arr+1代表arr[1]的地址
2、arr与arr+1之间,相差一个int的字节长度,即4个字节长度
若定义一个二维数组:
1 #include <stdio.h>
2
3 int main()
4 {
5
6 int b[2][3]={{1,2,3},{4,5,6}}; //定义二维数值及赋值
7
8 printf("b=%p n",b); //b的值
9 printf("b+1=%p n",b+1); //b+1的值
10
11 printf("b0+1=%p n",b[0]); //b[0]的值
12 printf("b0+1=%p n",b[0]+1); //b[0]+1的值
13
14 printf("b00=%p n",&b[0][0]); //b[i][j]的地址
15 printf("b01=%p n",&b[0][1]);
16 printf("b02=%p n",&b[0][2]);
17 printf("b10=%p n",&b[1][0]);
18 printf("b11=%p n",&b[1][1]);
19 printf("b12=%p n",&b[1][2]);
20
21 return 0;
22 }
运行结果:
b = 0xbf966554
b+1 = 0xbf966560
b[0]+1 = 0xbf966554
b[0]+1 = 0xbf966558
b[0,0] = 0xbf966554
b[0,1] = 0xbf966558
b[0,2] = 0xbf96655c
b[1,0] = 0xbf966560
b[1,1] = 0xbf966564
b[1,2] = 0xbf966568
通过上述结果,可以得到以下结论:
1、b、b[0]、b[1]都代表变量名,表示地址;b[i][j]表示存储在内存的数值。
2、b 和 b+1 之间相差12个字节,即3个int位。
3、b[0] 和 b[0]+1 之间相差4个字节,即1个int位。
4、b变量的数据类型是 int [3],类似于 int [3] b[2],数学上代表矩阵的行数
5、b[0]变量的数据类型是 int,类似于 int b[0] [3],数学上代表矩阵的列数
最后
以上就是儒雅镜子为你收集整理的C/C++的数据类型解读常用的字符类型计算运存与内存地址数据类型的含义的全部内容,希望文章能够帮你解决C/C++的数据类型解读常用的字符类型计算运存与内存地址数据类型的含义所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复