二:《初学C语言》— 数据类型和变量

简介: 本篇文章详细介绍了C语言的数据类型和变量,数据类型是C语言中最基础的内容,也是必须要清楚的知识点

二:数据类型和变量

1.数据类型的介绍:

​ 内置数据类型(C语言本身具有的):字符 - char;整型 - int;浮点型 - float;布尔类型 - _Bool

​ 自定义数据类型(自己创建的类型):数组;结构体 - struct;枚举 - enum;联合体 - union

(1)字符类型:字符类型分为三类

1. char //字符类型
2. signed char //有符号的字符类型
3. unsigned char //无符号的字符类型

(2)整型:整型分为四大类

//整型
1. int //整数类型
2. [signed] int //有符号的整型
3. unsigned [int] //无符号的整型
//短整型
1. short [int] //短整型
2. [signed] short [int] //有符号的短整型
3. unsigned short [int] //无符号的短整型
//长整型
1. long [int] //长整型
2. [signed] long [int] //有符号的长整型
3. [unsigned] long [int] //无符号的长整型
//更长的整型
1. long long [int] //长长整型
2. [signed] long long [int] //有符号的长长整型
3. unsigned long long [int] //无符号的长长整型

注意:以上用 [ ] 包裹的内容,在编写代码时都可以省略不写

(3)浮点型(小数):浮点型分为三类

1. float //单精度浮点型
2. double //双精度浮点型(精度比较高)
3. long double //精度更高的浮点型

(4)布尔类型:在C语言最开始的时候,用0来表示假,而非0则表示真,后来在 C99 标准中引入了布尔类型

​ 在使用布尔类型时还要包含头文件 <stdbool.h>

​ 布尔类型变量的取值只有两种:true或者false

1. _Bool //布尔类型
#include <stdio.h>
#include <stdbool.h>
int main()
{
   
    _Bool flag = true;
    if(flag)
        printf("I Like You\n");
    return 0;
}

2.signed 和 unsigned:

  • ​ 在C语言中,signedunsigned 两个关键字是用来修饰字符型和整型的
  • signed 关键字,表示一个类型带有正负号,包含负值
  • unsigned 关键字,表示该类型不带有正负号,只能表示0和正整数
  • ​ 对于 int 类型,默认是带正负号的,也就是 int 等同于 signed int,所以 signed 可以省略不写
int main()
{
   
    signed int temperature1 = 30; //temperature表示温度,而温度会有负数的可能性,所以用signed修饰
    signed int temperature2 = -30;
    unsigned int age = 20; //age表示年龄,而年龄未来只有正数的可能性,所以用unsigned去修饰
    return 0}

注意: 当表示非负整数时,这时必须使用 unsigned 去声明变量

​ 整数变量声明为 unsigned 的好处是,同样长度的内存能够表示最大的整数值增大了一倍

​ 整数类型的取值范围可以参考 limits.h 中给出的定义

//字符类型的取值范围
1. signed char a; //取值范围为 -128~127
2. unsigned char a; //取值范围为 0~255

注意: C语言规定 char 类型是否带有正负号,由当前系统决定,也就是说 char 不等同于 signed char,它有可能是 signed char,也有可能是 unsigned char;这一点与 int 不同

3.数据类型的取值范围:

​ 每一种数据类型都有自己的取值范围,也就是存储数值的最大和最小值的区间

查看当前的系统上不同数据类型的取值:

​ limits.h 这个头文件中说明了整数类型的取值范围

​ float.h 这个头文件中说明了浮点类型的取值范围

​ 为了代码的可移植性,当需要知道某种数据类型的极限值时,尽量使用这些常量:

常量 描述
SCHAR_MIN;SCHAR_MAX signed char 的最小值和最大值
SHRT_MIN;SHRT_MAX short 的最小值和最大值
INT_MIN;INT_MAX int 的最小值和最大值
LONG_MIN;LONG_MAX long 的最小值和最大值
LLONG_MIN;LLONG_MAX long long 的最小值和最大值
UCHAR_MAX unsigned char 的最大值
USHAR_MAX unsigned short 的最大值
UINT_MAX unsigned int 的最大值
ULONG_MAX unsigned long 的最大值
ULLONG_MAX unsigned long long 的最大值

注意: 在使用这些常量时记得包含头文件

操作符 sizeof():计算的是类型创建的变量所占内存的大小,单位是字节

size_t 是专门为 sizeof() 设置的一个类型,size_t 的本质是 unsigned int

注意: size_t 类型的数据在打印的时候格式应该使用 %zd

int main()
{
   
    printf("%zd\n",sizeof(char));
    printf("%zd\n",sizeof(short));
    printf("%zd\n",sizeof(int));
    printf("%zd\n",sizeof(long long));
    printf("%zd\n",sizeof(float));
    printf("%zd\n",sizeof(double));
    return 0;
}
//C语言标准规定:sizeof(long) >= sizeof(int)

注意:计算机中常见的单位:(由小到大排序)

bit -- 比特位 -- 当存储一个二进制位(1或0)的时候所需要的空间就是一个比特位

Byte -- 字节 -- 1Byte == 8bit

KB -- 1KB == 1024Byte

MB -- 1MB == 1024KB

GB -- 1GB == 1024MB

TB -- 1TB == 1024GB

PB -- 1PB == 1024TB


4.变量:

(1)变量的创建

​ C语言中把经常变化的值称为变量,不变的值称为常量,类型就是用来创建变量的

创建变量的语法格式:数据类型 变量名;

date_type name;

//变量的创建
#include <stdio.h>
int main()
{
   
    int age; //整型变量
    char str; //字符变量
    float heigh; //浮点型变量
    return 0;
}

​ 变量在创建的时候给一个初始值,就叫初始化

//变量的初始化
#include <stdio.h>
int main()
{
   
    int age = 18;
    char str = "你猜";
    float heigh = 3.14159; //编译器会自动把它识别成double类型的数字,容易出现警告
    float heigh = 3.14159f; //此时在值的后面加上一个f,编译器会自动把它识别成float类型的数字
    return 0;
}

(2)变量的分类

全局变量:在大括号外部定义的变量就是全局变量,全局变量的使用范围广,在整个工程中想使用,都是有办法使用的

局部变量:在大括号内部定义的变量就是局部变量,局部变量的使用范围比较局限,只能在自己所在的局部范围内使用

#include <stdio.h>
float a = 3.1234f; //全局变量,这个a可以在整个项目工程中使用
int main()
{
   
    int b = 10; //局部变量,这个b仅限于main()函数内部使用
    {
   
        char c = "你猜" //这个c仅限于这个小括号中使用
    }
    return 0;
}

注意: 当全局变量与局部变量重名时,局部变量会优先使用


注意:

1.局部变量是放在内存的栈区

2.全局变量是放在内存的静态区

3.堆区是用来动态内存管理的


5.算术操作符:

​ 算术操作符,因为其操作符的左右两端都各有一个操作数,所以也叫做双目操作符,操作符也叫运算符

(1)加法 + 和减法 -

#include <stdio.h>
int main()
{
   
    int a = 34 + 78;
    float b = 45.7 - 30.3;
    int c = a + b; //变量之间也可以相加减
    printf("%d\n",a);
    printf("%d\n",b);
    printf("%d\n",c);
    reyurn 0;
}

(2)乘法 *

#include <stdio.h>
int main()
{
   
    int a = 23 * 78;
    printf("%d\n",a);
    return 0;
}

(3)除法(整数除法,只要整数不要余数) /

#include <stdio.h>
int main()
{
   
    int a = 7 / 2; //结果为3
    printf("%d\n",a);
    return 0;
}

注意:

除号两端如果都是整数,则执行整数除法,得到的结果也是整数,舍弃余数

除号两端只要有浮点数,此时则执行浮点数除法

#include <stdio.h>
int main()
{
   
    int a = 7.0f / 2;
    printf("%d\n",a);
    return 0;
}

(4)取模 %

#include <stdio.h>
int main()
{
   
    int a = 23 % 78;
    printf("%d\n",a);`
    return 0;
}

注意:

取模返回的是两个整数相除的余数,且取模只能用于整数,不能用于浮点数

当进行负数取模时,结果的正负号由第一个操作数的正负号决定

#include <stdio.h>
int main()
{
   
    int a = -23 % 78; //此时结果是负数
    int b = 8 % -2; //此时结果是正数
    printf("%d\n",a);
    printf("%d\n",b);
    return 0;
}

6.赋值操作符:

​ 在变量创建时,给一个值叫做初始化;在变量创建好后,再给一个值,这叫赋值,赋值符号:=

#include <stdio.h>
int main()
{
   
    int a = 20; //初始化
    a = 40; //赋值
    return 0;
}

(1)连续赋值:

#include <stdio.h>
int main()
{
   
    int a = 20; //初始化
    int b = 40;
    int c = 78;
    c = b = c + a + 4; //连续赋值,从右到左依次赋值
    printf("%d\n",c);
    return 0;
}

(2)复合赋值(自增;自减):

#include <stdio.h>
int main()
{
   
    int a = 20; //初始化
    a = a + 3; //可以将其替换成 a += 3;
    a = a - 4; //可以将其替换成 a -= 2;
    printf("%d\n",a);
    return 0;
}

7.单目操作符:

​ 在C语言中一些操作符只有一个操作数,而这些操作符被称为单目操作符

(1)++--

++是一种自增1的操作符,又分为前置++和后置++

--是一种自减的1操作符,又分为前置--和后置--

//前置++或--:先++或--,后使用
#include <stdio.h>
int main()
{
   
    int a = 29;
    int b = ++a; //先 a = a + 1;再 b = a
    printf("%d\n",a); //结果为30
    printf("%d\n",b); //结果为30
    return 0;
}
#include <stdio.h>
int main()
{
   
    int a = 29;
    int b = --a; //先 a = a - 1;再 b = a
    printf("%d\n",a); //结果为28
    printf("%d\n",b); //结果为28
    return 0;
}
//后置++或--:先使用,再进行++或--
#include <stdio.h>
int main()
{
   
    int a = 29;
    int b = a++; //先 b = a;再 a = a + 1
    printf("%d\n",a); //结果为30
    printf("%d\n",b); //结果为29
    return 0;
}
#include <stdio.h>
int main()
{
   
    int a = 29;
    int b = a--; //先 b = a;再 a = a - 1
    printf("%d\n",a); //结果为28
    printf("%d\n",b); //结果为29
    return 0;
}

(2)+-

​ 这里是正号和负号,都是单目操作符

​ 操作符 + 对正负值没有影响,是一个可以省略的符号;

​ 操作符 - 是用来改变一个值的正负,负数前加上 - 就会得到正数;正数前加上 - 会得到负数

#include <stdio.h>
int main()
{
   
    int a = +10; //等同于 int a = 10;
    int b = -20;
    int c = -b; //等同于 c = 20;
    printf("%d\n",c);
    return 0;
}

8.强制类型转换:

​ 强制类型转换是操作符中一种特殊的操作符

语法格式:(类型) -- 想强制转换成什么类型就在括号里写上什么类型

#include <stdio.h>
int main()
{
   
    int a = (int)3.1415; //结果为3,将double类型强制转换成int类型
    printf("%d\n",a);
    return 0;
}

注意:强扭的瓜不甜

目录
相关文章
|
1月前
|
存储 安全 C语言
C语言中的数据类型
C语言中的数据类型
|
1月前
|
存储 C语言
C语言数据类型、变量和运算符以及printf相关问题
C语言数据类型、变量和运算符以及printf相关问题
|
8天前
|
存储 C语言 索引
C 语言数据类型详解
C语言中的数据类型主要包括基本数据类型、构造数据类型和用户定义数据类型。基本类型如整型(`int`)、字符型(`char`)、浮点型(`float`)、双精度浮点型(`double`)和无符号整型(`unsigned int`)。构造类型包括数组(`Array`)、结构体(`Struct`)、共用体(`Union`)和枚举(`Enum`)。用户定义类型则通过`typedef`为已有类型定义新名称,并可通过结构体和共用体自定义复合数据结构。此外,还有指针类型用于存储变量地址,以及`signed`、`unsigned`、`short`、`long`等类型修饰符。
41 11
|
7天前
|
存储 C语言
【C语言基础考研向】02 数据类型-常量-变量
本文介绍了编程中的基本概念,包括数据类型分类、常量与变量的定义及使用。首先概述了四大类数据类型:基本类型(整型、浮点、字符型)、构造类型(数组、结构体)、指针类型和空类型。接着阐述了常量与变量的区别及命名规则,并详细说明了整型、浮点型和字符型数据的特点与应用。最后总结了常见的易错点,如字符串与字符常量的区别及浮点数的默认输出格式。
|
8天前
|
存储 传感器 物联网
结合物联网开发探讨C语言的变量
在物联网(IoT)开发中,C语言的变量起着至关重要的作用。由于物联网设备资源有限,C语言的高效性和对硬件的直接控制使其成为开发嵌入式系统的首选。
|
10天前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
|
9天前
|
存储 编译器 程序员
c语言基本数据类型详解
在 C 语言中,基本数据类型用于存储不同类型的数据,并在内存中分配不同大小的空间,如 `char`(1 字节)、`int`(4 字节)、`short`(2 字节)、`long`(4 或 8 字节)、`float`(4 字节)和 `double`(8 字节)。此外,还有 `void` 和用 `int` 类型替代的 `bool` 类型。这些数据类型的存储空间大小可能因编译器和平台的不同而有所变化,但通常遵循上述规则。选择合适的数据类型可以充分利用内存空间并确保数据准确性。C 语言还支持用户自定义数据类型,如结构体和枚举类型,用于描述复杂的数据结构。
|
10天前
|
C语言
C语言程序设计核心详解 第二章:数据与数据类型 4种常量详解 常见表达式详解
本文详细介绍了C语言中的数据与数据类型,包括常量、变量、表达式和函数等内容。常量分为整型、实型、字符型和字符串常量,其中整型常量有十进制、八进制和十六进制三种形式;实型常量包括小数和指数形式;字符型常量涵盖常规字符、转义字符及八进制、十六进制形式;字符串常量由双引号括起。变量遵循先定义后使用的规则,并需遵守命名规范。函数分为标准函数和自定义函数,如`sqrt()`和`abs()`。表达式涉及算术、赋值、自增自减和逗号运算符等,需注意运算符的优先级和结合性。文章还介绍了强制类型转换及隐式转换的概念。
|
15天前
|
存储 Ubuntu Linux
C语言 多线程编程(1) 初识线程和条件变量
本文档详细介绍了多线程的概念、相关命令及线程的操作方法。首先解释了线程的定义及其与进程的关系,接着对比了线程与进程的区别。随后介绍了如何在 Linux 系统中使用 `pidstat`、`top` 和 `ps` 命令查看线程信息。文档还探讨了多进程和多线程模式各自的优缺点及适用场景,并详细讲解了如何使用 POSIX 线程库创建、退出、等待和取消线程。此外,还介绍了线程分离的概念和方法,并提供了多个示例代码帮助理解。最后,深入探讨了线程间的通讯机制、互斥锁和条件变量的使用,通过具体示例展示了如何实现生产者与消费者的同步模型。
|
1月前
|
C语言
C语言------数据类型与输入输出
这篇文章是C语言的数据类型与输入输出实训教程,通过示例代码演示了整型、实型、字符型数据的定义、使用和输出,以及如何使用printf()和scanf()函数进行格式化输出和输入。
C语言------数据类型与输入输出