C语言 常量,数据类型

一、数据类型

定义:数据类型就是固定内存大小的别名,并且描述了一个变量存放什类型。

数据:计算机要处理的数据(数字、字符串、文字、符号、图片、音视频等)

  • 数据类型不仅帮助我们组织和操作数据,还决定了程序如何有效的利用内存。
  • 了解数据类型的内存需求是理解计算机管理和操作数据的关键。
    小贴士:程序运行需要在内存中

数据类型分类和计算方法

一、数据类型分类(重点)

(1)基本数据类型(c语言内置)

① 数值类型

整数型(整数)

短整型:short(short int 缩写)

基本型:int (使用频率高)

长整型:long (long int 缩写)

长长整型:long long (long long int 缩写,C99新增)

② 浮点型(小数,实数,实型)

单精度:float

双精度:double

长双精度型:long double (C99新增)

③ 字符型:char

(2)构造类型(C语言提供语法、用户自定义)

结构体:struct

联合体/共用体:union

枚举类型:enum

(3)指针类型

(4)空类型:void(C语言内置)

二、数据类型在内存的大小(重点)

|----|---------------------------|--------------------|-----------------------------|
| 序号 | 数据类型 | 中文说明 | 大小 |
| 1 | short(short int) | 短整型 | 2 |
| 2 | int | 基本整型 | 4 |
| 3 | long (long int) | 长整型 | 4(32位系统)/8(64位系统) |
| 4 | long long (long long int) | 长长整型 | 8 |
| 5 | float | 单精度浮点型 | 4 |
| 6 | double | 双精度浮点型 | 8 |
| 7 | char | 字符型 | 1 |
| 8 | bool(_Bool,C99新增) | 布尔型、true-真、flase-假 | bool:1、true(1):4、flase(0):4 |

小贴士:获取某个数据类型或者变量所占的字节数、使用sizeof(某个数据类型或者变量名)

sizeof() 的返size_t(无符号整型常量)用对应的%zd进行输出。

在C99 中,sizeof输出用%zd

cpp 复制代码
#include<stdio.h>
#include <stdbool.h>


int main()
{
	printf("true size:%zd\n",sizeof(true)); 
	//ture size:4  解释;true本身就是int 1,所以占4字节
	printf("bool size:%zd\n",sizeof(bool));
	//bool size:1  解释:占1字节
	printf("false size:%lld\n",sizeof(false));
	//false size:1  解释:占4字节
	printf("int size:%zd\n",sizeof(int));
	printf("long long 的大小是%zd个字节\n", sizeof(long long)); // %d 表示10进制整数
	printf("long 的大小是%zd个字节\n",sizeof(long));
	printf("long double的大小是%zd个字节\n",sizeof(long double));
	return 0;
}

总结:

①数据类型在内存中所占的字节数跟C语言的编译系统有关。

②计算某个数据类型所占字节数可以用sizeof运算符。

③布尔类型要添加 #include <stdbool.h> ,大家也可以直接使用int类型的0和1来表示布尔类型。
④在c99z中,sizeof()输出,用%zd。

二、常量

在c语言中,数据的基本表现形式是常量和变量。不管是变量还是常量,都需要在内存中申请一块空间,用于数据的存放。

定义:在程序执行过程中其值不可改变的量,称之为常量。

分类:int、float、double、char、符号常量(宏定义)。

整型常量

(1)整型常量可以用十进制、八进制、十六进制三种表现形式

  • 十进制常量:由数字0~9构成,没有前缀、不能以0开头。
cpp 复制代码
99,128  //正确
0        //正确
09       //错误
  • 八进制常量:由数字0~7构成,以0为前缀,不能表示小数。
cpp 复制代码
023,077 // 正确
00 // 正确
099 // 错误
  • **十六进制常量:**由数字0~9、字母a ~ f/A ~ F构成,以0x / 0X为前缀,不能表示小数。
cpp 复制代码
0xffffff // 正确
0x0 // 正确

注意:

整型常量中的长整型数据可用 L或者l 作为后缀

cpp 复制代码
long num = 123L;

(2)整型常量的分类:

① 有符号与无符号基本整型常量(int)

有符号表示范围:负数+0+正数,默认写的都是有符号

无符号表示范围:0+正数,内存中所有负数的位置都用来表示正数、此时它的正数范围超过有符号正数范围。

②有符号与无符号长整型常量(long)

③有符号与无符号短整型常量(short)

(二)整型常量的表示(在进制表达的基础上,添加 + - )

  • 十进制表示:可以使用10个数字符号0~9以及 +,- ,如:123,-90
  • 八进制表示:以0开头,可以使用7个数字符号0~7以及 +,- ,如:0123,-011
  • 十六进制表示:以0x或者0X开头,可以使用 0~9 以及 A~F(a~f) ,如:0x12,-0x12

浮点型常量

C语言中浮点数就是平常说的小数(实数)、有两种表现形式:

  • 十进制小数(float常量需要跟上F/f)如:0.123,-12.6、0.1234f
  • 指数形式(科学计数法):

正数表示:如十进制小数1234.5的指数表示法就是1.2345e3。

负数表示:如十进制小数1234.5的指数表示法就是1.2345e-3。

注意

① 在符号e的前面必须要有数字

② 在符号e的后面必须为整数,不能是带有小数点的实数型。

③ 实型常量的后缀用F/f表示单精度型

字符型常量

用单引号 ' ' 括起来的一个字符,如 'a', 'A', '4', '_' 等,比如: '刘' 就不是字符,一个汉字所占的字节数超过1个字符。中文符号当成汉字理解。英文输入法下输入的字母、数字、符号都是单符。

注:在 C 语言中,汉字属于 "多字节字符" ,本质上是由多个字节(char 类型)组成的序列,具体取决于编码方式(如 GBK、UTF-8 等)。

转义字符常量:以 \ 开头的字符序列,表示控制以及不可见字符。

|------|-------|--------|
| 字符形式 | 中文含义 | ASCII码 |
| \n | 换行 | 10 |
| \r | 回车 | 13 |
| \0 | 空字符 | 0 |
| \t | 水平制表符 | 9 |

注意:使用 man ascii 可以查看所有的ASCII字符。

字符串常量

说明:在c语言中,支持字符串常量、不支持字符串变量。字符串变量需要使用字符数组或者字符指针实现。

  • 用一个双引号 " " 括起来的一个字符序列,如:
cpp 复制代码
"How do you do? zhaopeipei"
"hello world!"
"12"
"true"
"12.25"
  • 可以使用printf()输出一个字符序列,如:
cpp 复制代码
printf("%s","hello world!\n");
printf("hello world!\n"); // 等价于上面写法

注意:

字符常量'a' 与 字符串常量" a "的区别:

系统自动为字符串常量加上结尾的 \0 ,使所占内存单元多一个,单字符常量的长度不变,可

用sizeof()运算符来测量。

空串和空格串:(sizeof()和strlen())

特性 sizeof() strlen()
性质 运算符(编译时计算) 库函数(运行时计算)
计算对象 任意类型 / 变量(int、数组、结构体等) 仅以 '\0' 结尾的字符串
计算内容 占用的总内存字节数 有效字符数(不含 '\0'
是否依赖 '\0' 不依赖(计算总内存) 依赖(遇到 '\0' 停止)
支持的类型范围 所有类型 仅字符串(char*char 数组)
cpp 复制代码
#include <stdio.h>
#include <string.h>

int main() {
	// 空字符串
	char str1[] = "";
	printf("str1: \"\" \n");
	printf("  sizeof(str1) = %zd (数组总字节数)\n", sizeof(str1));  // 输出 1
	printf("  strlen(str1) = %zd (有效字符数)\n", strlen(str1));    // 输出 0
	
	// 含一个空格的字符串
	char str2[] = " ";
	printf("\nstr2: \" \" \n");
	printf("  sizeof(str2) = %zd (数组总字节数)\n", sizeof(str2));  // 输出 2
	printf("  strlen(str2) = %zd (有效字符数)\n", strlen(str2));    // 输出 1
	
	return 0;
}

符号常量

说明:一般通过宏定义,在预处理的时候替换成具体的常量,定义一个标识符来代表常量,如用PI(代表圆周率 3.1415926)

定义符号常量

  • 需要借助预处理指令: #define

  • 格式:

    cpp 复制代码
    #define 宏名称 宏值
  • 注意:

宏名称和宏值之间用空格隔开

句末不能添加任何符号

无参的宏名称的命名采用大写,如果有多个单词,使用下划线分隔,举例

cpp 复制代码
#define MAX_VAL 9999
#define MIN_VAL 1000

举例:

cpp 复制代码
#include <stdio.h>
// 定义符号常量
#define PI 3.14
#define R 20


int main(int argc,char *argv[])
{
    // 计算圆的周长 2 × PI × R
    printf("计算圆的周长:%f\n",2 * PI * R);// %f:以小数显示
    // 计算圆的面积 PI × R × R
    printf("计算圆的面积:%f\n",PI * R * R);
    return 0;
}
相关推荐
Sally璐璐12 分钟前
Go语言变量声明与初始化详解
java·开发语言·golang
luofeiju33 分钟前
交叉编译笔记
开发语言
StudyWinter1 小时前
【C++】仿函数和回调函数
开发语言·c++·回调函数·仿函数
C4程序员1 小时前
北京JAVA基础面试30天打卡14
java·开发语言·面试
黑客影儿2 小时前
Go特有的安全漏洞及渗透测试利用方法(通俗易懂)
开发语言·后端·安全·web安全·网络安全·golang·系统安全
小红帽2.03 小时前
从ioutil到os:Golang在线客服聊天系统文件读取的迁移实践
服务器·开发语言·golang
Zafir20244 小时前
Qt实现TabWidget通过addTab函数添加的页,页内控件自适应窗口大小
开发语言·c++·qt·ui
阿巴~阿巴~4 小时前
深入解析C++非类型模板参数
开发语言·c++
多吃蔬菜!!!4 小时前
vscode 搭建C/C++开发环境搭建(linux)
linux·c语言·c++