IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c语言初识 数据类型 -> 正文阅读

[C++知识库]c语言初识 数据类型

c语言中,数据分为不同类型,本文简单介绍各种数据类型。

1.基本类型

C语言为我们提供的内置类型,简单的数据类型,可通过以下测试判断其所占内存大小。

?
#include<stdio.h>
int main()
{
	printf("%u\n", sizeof(char));		//1
	printf("%u\n", sizeof(short));		//2,可表示的最大数字为2^16-1=65535
	printf("%u\n", sizeof(int));		//4,可表示的最大数字为2^32-1
	printf("%u\n", sizeof(float));		//4
	printf("%u\n", sizeof(long)); 		//4 or 8
	printf("%u\n", sizeof(long long));	//8
	printf("%u\n", sizeof(double));		//8
										// %u 输出无符号整数
	return 0;
}

?

int与long类型的大小关系是sizeof(int)<=sizeof(long),sizeof(long)根据编译器不同,为4或8。

有符号整数类型字节数取值范围
char1

-2^7? ~? 2^7-1

( -128? ~? 127)?

short2

-2^15? ~? 2^15-1

( -32 768? ~? 32 767 )

int4

-2^31? ~? 2^31-1

( -2 147 483 648? ~? 2 147 483 647 )

long4

-2^31? ~? 2^31-1

( -2 147 483 648? ~? 2 147 483 647 )

long long8

-2^63? ~? 2^63-1

( 9.2233720368548e+18)??~??( 9.2233720368548e+18)

有符号整数类型字节数取值范围
unsigned char10? ~? 2^8-1 (255)
unsigned short20? ~? 2^16-1 (65 535)
unsigned int40? ~? 2^32-1 (4 294 967 295)
unsigned long40? ~? 2^32-1 (4 294 967 295)
unsigned long long80? ~? 2^64-1 (1.844674407371e+19)
浮点类型字节数取值范围
float4-/+? 3.4e38? (精确到6位小数)
double8-/+? 1.7e308? (精确到15位小数)

2.构造类型

程序员自己定义的类型,相对复杂。

2.1 结构体

结构是一些值的集合,这些值被统称为成员变量。结构的每个成员可以是不同类型的变量。所以结构可以用来描述一个复杂的对象,其中成员即是对象的各种属性。

struct tag 
{  
  member_list;
}value_list;

struct是结构体关键字,tag是结构体标签名,member_list是定义成员变量的列表,value_list是用该结构体创建的全局变量的列表,可缺省

struct Book
{
	char name[20];
	char authon[20];
	float price;
}b1,b2;
struct Book b3;	
int main()
{
	struct Book b4;
	return 0;
}

上述书籍的例子中,b1、b2和b3是完全等价的全局变量,b4是局部变量。

2.2 枚举类型

枚举就是一一列举,很多数据可以列举出来,如:性别、星期……

enum Tag
{
	con1,
	con2
};

enum是枚举关键字,Tag是枚举对象名,con1con2是枚举常量列表。

枚举常量相当于整型常量,默认从0开始赋值,然后累加。

2.3 共用体

联合体包含一系列成员,这些成员共用同一块空间,所以联合体也叫共用体。

?union是共用体关键字,共用体内成员共用一个空间,共用体变量的大小最小是最大成员的大小。

union Un1 
{
	char c[5];
	int i;
};

union Un2 
{
	short c[7];
	int i;
};

int main() 
{
	printf("%d\n", sizeof(union Un1));    //8
	printf("%d\n", sizeof(union Un2));    //16
	return 0;
}

当最大成员大小不够最大对齐数的整数倍时,对齐到最大对齐数的整数倍处。

因为联合体所有成员共用一块空间,故算出最大成员大小后,只在最后需要再浪费几个字节的空间以对齐到最大对齐数的整数倍。

3.指针类型

C语言的指针类型包括两方面的信息:

一是地址,存放在指针变量中;

二是类型信息,关乎于读写的长度,没有存储在指针变量中,位于用该指针读写时的mov指令中,不同的读写长度对应的mov指令不同。

//定义int类型的指针  
    int* p = &i;  

指针为什么要有类型?

因为指针存储的是一个内存地址,然而我们只根据一个地址读取对应的数据,但是你不知道什么时候读取完毕,也就导致了数据丢失,所以我们需要指定指针类型,确定什么时候读取完毕 。

指针也是一个变量,它自己占据一个4个字节的地址空间(由于程序的寻址空间是2^32次方,即4GB,所以用4个字节表示指针就已经能指向任何程序能够寻址到的空间了,所以指针的大小为4字节),他的值是另一个东西的地址,这个东西可以是普通变量,结构体,还可以是个函数等等。

4.空类型 void?

void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。

void型的使用:

????????a.定义函数返回值类型,参数类型

void fun(void)
{
    printf("hello");
}

? ? ? ? b.与指针结合使用定义变量

/*   void*的独特作用   */
int i = 10;      //之所以先定义一个变量,再进行取地址
void * p = &i;   //内存的地址是 int * 型的,赋值给指针p后,地址大小没变,类型变为 void * 型. 
                 //注意:此句可以将有实际类型的指针去掉实际类型,变成空类型指针.
char * pi = (char *)p;    //类型强转,赋值给指针pi后,地址大小没变,类型变为char * 型
                          //注意:void * 型指针不能直接使用,必须用其他指针类型强转为其他类型指针,然后再使用.
                          //因为针对void * 型,编译器知道地址,并不知道占多少个字节.
                          //注意:上述三条语句并没有实际意义,完全可以通过之后两句实现
int i = 10;
char * pi = (char *)&i;

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-23 15:34:46  更:2021-12-23 15:36:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:55:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码