[C语言] 基本数据类型及变量的定义

一、前言

  基本数据类型和变量的定义在任何编程语言中都是非常基础且非常重要的知识点, 需要熟练掌握, 能够灵活运用. 本文将介绍C语言的常用数据类型及变量的定义方法.

二、基本数据类型的介绍

2.1 整型

  整型, 顾名思义, 就是整数类型. 下面逐一介绍C语言中整型数据的关键字.

关键字名称取值范围(x64)
int整型-2,147,483,648 ~ 2,147,483,647
unsigned int无符号整型0 ~ 4,294,967,295
long int长整型-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
unsigned long int无符号长整型0 ~ 18,446,744,073,709,551,615
long long int加长整型-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
unsigned long long int无符号加长整型0 ~ 18,446,744,073,709,551,615
short int短整型-32,768 ~ 32,767
unsigned short int无符号短整型0 ~ 65,535
char字符型-128 ~ 127
unsigned char无符号字符型0 ~ 255

  其中, unsigned关键字意为"无符号", 即取值范围大于等于0, 没有负号.

   注意事项: 定义变量时变量的值一定要在该变量的数据类型所对应的数据范围之内, 否则会造成数据溢出, 导致程序出错.

  其实数据类型的数据范围不需要刻意去记忆, 用到时可以凭感觉选择一个数据类型, 如果报错可以查看报错内容, 适当地修改数据类型. 因为在某些平台上取值范围可能是不同的.

2.2 浮点型

  浮点型, 顾名思义, 就是表示小数的数据类型. 下面逐一介绍C语言中浮点型数据的关键字.

关键字名称取值范围(x64)有效数字
float单精度浮点型3.4E-38 到 3.4E+386 - 9位
double双精度浮点型2.3E-308 到 1.7E+30815 - 17位
long double拓展精度浮点型-1.2E-4932~1.2E+493218 - 19位

   注意: 精度范围依赖于不同的平台, 具体依实际情况而定.

2.3 void 类型

  void类型, 即"空"类型, 它可以在函数返回值为空时使用, 也可以在函数参数为空时使用.
  示例:
  void func() {} // 函数返回值为空
  int func(void) {} // 函数参数为空
  void func(void) {} // 函数返回值和参数都为空
  提示: 不了解函数的同学可以点击链接查看介绍函数的博文[C语言] 函数

2.4 其它类型

关键字名称解释
_Bool 或 bool布尔值取值为True/False, 即 真/假
_Complex 或 complex复数类型用于处理复数数据

三、变量的定义

  变量, 即可变的量, 在程序中可以被二次赋值. 变量在程序中是不可或缺的, 它可以帮助我们完成很多功能. 下文将介绍有关变量的内容.

3.1 变量定义的基本格式

   格式: 变量类型 变量名 = 变量值;

3.2 举例

  要求: 定义一个变量名为num, 变量值为10, 且变量类型为int类型的变量.
  代码:

int num = 10;

四、sizeof()函数的用法

  使用sizeof()函数可以返回某个类型或某个变量在特定平台上的准确大小, 一般返回值的单位为字节. sizeof()函数包含在stdio.h头文件中, 要提前包含进来. 下面来看一个例子:
  例: 获取int类型的大小:

#include <stdio.h>

int main()
{
	printf("int 类型的大小: %zu\n", sizeof(int));
	return 0;
}

  输出;
输出
  可以看出, int类型在当前平台上的大小为4个字节.
  其中, sizeof()函数的返回值为size_t类型, 因此要使用%zu占位符, 在某些版本下也可以使用%lld或%zd占位符.
  提示: 不了占位符的同学可以点击链接查看介占位符的博文[C语言] printf()函数及占位符的使用

五、数据类型的强制转换

  通常情况下, C语言只能是相同类型的数据做计算, 不同类型的数据是不能做计算的.
  例1: 两个不同类型的数据做加法

#include <stdio.h>

int main()
{
	double sum = 2 + 2.1; // 当两个不同数据类型的数据做加法
	printf("sum = %.5f", sum); // 精确到小数点后5位
	return 0;
}

  在较新版本的编译器下, 这段代码不会报错, 可以正常输出结果:
例1输出

  这是因为C语言的自动类型转换的机制, 也叫隐式类型转换. 变量sum为double类型, 数字2.1保持double类型, 数字2自动从int类型提升为double类型, 最终计算输出double类型的结果.

  如果我们将变量sum的类型改为float会怎样呢?
  例2 将接收加法结果的变量数据类型改为float:

#include <stdio.h>

int main()
{
	float sum = 2 + 2.1; // 当两个不同数据类型的数据做加法
	printf("sum = %5f", sum); // 精确到小数点后5位
	return 0;
}

  编译后报错:
例2报错
  我们看看警告信息: warning: conversion from ‘double’ to ‘float’ changes value from ‘4.0999999999999996e+0’ to ‘4.0999999e+0f’ [-Wfloat-conversion]
  大意就是说我们double类型转换到float类型会损失精度. 但也可以正常运行:
例2运行
  出现这种警告就是做加法的两个数和接收加法结果的变量的数据类型不符合导致的. 这种情况下是没有自动类型转换的. 那么要怎样避免出现这种警告呢? 这就要说到强制类型转换了.
   格式: (要转化成的变量类型)变量;

  那么如果要用到强制类型转换的话, 要如何修改例2的代码呢?
  来看看下面这段代码:

#include <stdio.h>

int main()
{
	float sum = (float)2 + (float)2.1; // 将两个做加法的变量强制转化为float类型的数据.
	printf("sum = %.5f", sum); // 精确到小数点后5位
	return 0;
}

  这样编译后就没有警告信息了
例2改编译
  看看运行输出结果:
改2运行

  这样就能正常运行了.
  强制转换数据类型时, 为了减少精度的损失, 尽量将数据往更高精度的数据类型转换. 例如int类型可以转化为float/double类型, 而double类型就不要转化为int类型了, 这样会造成精度损失过多. 当然, 最好还是尽量少用强制类型转换.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w147288

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值