当前位置: 首页 > news >正文

第二章:C语言数据类型和变量

第二章:C语言数据类型和变量

目录

  • 数据类型的介绍
  • signed和unsigned
  • 数据类型的取值范围
  • 变量
  • 算数操作符 + - * / %
  • 赋值操作符 =
  • 单目操作符 ++ – + -
  • 强制类型转换
  • scanf和printf的介绍
数据类型
  • C语言提供了丰富的数据类型来描述生活中的各种数据
  • 使用整型类型来描述整数,使用字符类型来描述字符,使用浮点型类型来描述小数
  • 所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作
    数据
  • 数据类型整体分为内置类型和自定义类型
  • 内置类型分为:字符类型,整形,浮点型,布尔类型
  • 自定义类型分为:数组,结构体,枚举,联合
char 字符类型
  • 字符类型 分为有符号的无符号的
  • char 有符号的,unsigned char 是无符号的字符类型
int 整形
  • 整形可以衍生出来 short int long long long 其中long long 是C99中引入的
float 浮点型
  • float double long double 其中long double 是C99中引入的
bool 布尔类型
  • C语言原来并没有为布尔值单独设置⼀个类型,而是使用整数0表示假的,非0表示真的
  • 在C99中也引入了布尔类型,是专门表示真假 _Bool
  • 使用的头文件是#include<stdbool.h>
#include<stdio.h>
int main()
{int a = 0;if (a)printf("ok\n");elseprintf("aaa\n");return 0;
}
  • 使用布尔类型试试看
#include<stdio.h>
#include<stdbool.h>
int main()
{_Bool flag = true;if (flag)printf("ok");elseprintf("aaa\n");return 0;
}
#include<stdio.h>
#include<stdbool.h>
int main()
{bool flag = true;if (flag)printf("ok");elseprintf("aaa\n");return 0;
}

在这里插入图片描述

各种数据类型的长度
  • 每⼀种数据类型都有自己的长度,使用不同的数据类型,能够创建出长度度不同的变量,变量⻓度的不同,存储的数据范围就有所差异
  • char —1
  • short —2
  • int —4
  • long //长整型 —4/8
  • long long //更长的整形 —8
  • float —4
  • double —8
  • 注意,C语言里面没有字符串类型,为什么要有这么多的数据类型:为了更加丰富的表达生活中的各种值
sizeof操作符
  • sizeof 是⼀个关键字,也是操作符专门是用来计算sizeof的操作符数的类型长度的,单位是字节
#include<stdio.h>
int main()
{printf("%zd\n", sizeof(int));  //4printf("%zd\n", sizeof(char)); //1printf("%zd\n", sizeof(short)); //2printf("%zd\n", sizeof(long));  //4/8printf("%zd\n", sizeof(long long));  //8printf("%zd\n", sizeof(float));  //4printf("%zd\n", sizeof(double));  //8return 0;
}
//类型的大小单位都是字节
//计算机中的单位 
//bit(位) byte(字节) kbyte(kb) mb gb tb pb  
// 1 byte=8bit 1kb=1024byte 1mb=1024kb...
//前两个单位之间的换算单位是8,后面的单位之间的是1024
  • sizeof 操作符的操作数可以是类型,也可是变量或者表达式
  • sizeof的返回值是size_t类型的, 这种值打印用的格式控制符是%zd
#include<stdio.h>
int main()
{int a = 10;printf("%zd", sizeof(int));printf("\n");printf("%zd\n", sizeof(a));return 0;
}
  • sizeof 变量可以不加括号,但是sizeof类型是一定要加括号的
#include<stdio.h>
int main()
{int a = 10;printf("%zd", sizeof(a));printf("\n");printf("%zd", sizeof a);printf("%zd\n", sizeof(int));printf("%zd\n", sizeof int );printf("\n");//printf("%zd\n", sizeof(a));return 0;
}

在这里插入图片描述

  • sizeof中表达式不计算,下面两个printf打印出来的结果都是2
  • sizeof 在代码进行编译的时候,就根据表达式的类型确定了结果的大小,而表达式的计算却要在程序运行期间才能执⾏,在编译期间已经将sizeof处理掉了,所以在运行期间就不会执行表达式了
#include<stdio.h>
int main()
{int a = 10;short s = 5;printf("%zd\n", sizeof(s));printf("%zd\n", sizeof(s=a+2));return 0;
}
signed和unsigned
  • C语言使用signed 和unsigned 关键字修饰字符型和整型类型的
  • signed关键字,表示⼀个类型带有正负号,包含负值
  • unsigned 关键字,表示该类型不带有正负号,只能表示零和正整数。
  • 对于int类型,默认是带有正负号的,也就是说由于这是默 认情况,关键字int等同于signed int
#include<stdio.h>
int main()
{int a = 10;signed int a2 = 10;printf("%d\n", a);printf("%d\n", a2);return 0;
}
  • int所占四个字节的第一个字节的第一个比特位表示的的是符号位,0表示正,1表示负
  • 整数变量声明为unsigned 的好处是,同样长度的内存能够表示的最⼤整数值,增⼤了⼀倍,⽐如,16位的
    signed short int 的取值范围是:-32768到32767,而unsigned short int 的取值范围是:0~65535
  • 32位的int 的取值范围可以参看limits.h 中给出的定义
    在这里插入图片描述
  • 虽然说int 等于signed int ,但是char不一定等同于signed char,到底是有符号还是无符号根据编译器的不同有所不同,不过大多数情况下其实就是signed char
  • 既然我们已经说了有符号和无符号,那么我们其实还需要注意的一点就是有符号和无符号的格式控制符一定要匹配使用,不然就会有想不到的事情发生
#include<stdio.h>
int main()
{int a = 10;printf("%d\n", a);   //10signed int a2 = -10;printf("%d\n", a2);  //-10return 0;
}
#include<stdio.h>
int main()
{int a = 10;printf("%d\n", a);   //10signed int a2 = -10;printf("%u\n", a2);  //巨大的数字return 0;
}
数据类型的取值范围

在这里插入图片描述

变量
  • 上面说了类型,类型是用来干嘛的呢,类型其实就是用来创建变量的
  • 生活中的有些值是不变的,有些值是可变的
  • 不变的值,C语言中用常量的概念来表示,变的值C语言中用变量来表示
  • 全局变量不给初始化的话,就会默认他的值是0。局部变量不初始化的话,那么他的值就是随机值
  • 变量在创建的时候就给⼀个初始值,就叫初始化
#include<stdio.h>
int main()
{char ch = 'w';short age = 10;float weight = 55.5;
}
变量的分类
  • 局部变量:在⼤括号内部定义的变量就是局部变量,局部变量的使用范围是比较局限,只能在自己所在的局部范围内使用的
  • 全局变量:在⼤括号外部定义的变量就是全局变量,全局变量的使用范围更⼴,整个工程中想使⽤,都是有办法使用的
#include<stdio.h>
int a = 100;
int main()
{int b = 10;printf("%d\n", a);  //100printf("%d\n", b);  //10return 0;
}
  • 当全局变量和局部变量冲突的时候,局部变量优先
#include<stdio.h>
int a = 100;
int main()
{int a = 10;printf("%d\n", a);  //10return 0;
}
变量的使用
  • scanf和printf函数的使用
//求两个数字的和
#include<stdio.h>
int main()
{int a = 0;int b = 0;int c = 0;(void)scanf("%d %d", &a, &b);c = a + b;printf("%d ", c);return  0;
}
变量的作用域和生命周期
作用域
  • 作用域是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的。而限定这个名字的可用性的代码范围就是这个名字的作用域。局部变量的作用域是变量所在的局部范围。全局变量的作用域是整个工程
生命周期
  • 变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。全局变量的生命周期是:整个程序的生命周期。
#include<stdio.h>
int main()
{int num = 10;printf("%d", num);return 0;
//在这个程序中num的值是可以正常打印出来的
//因为num是局部变量,正好printf语句也处在num的作用域中,所以可以正常打印
}
#include<stdio.h>
int main()
{{int num = 10;}printf("%d", num);return 0;
//此时,这个程序会出错,num作用域中不包括有printf语句
//printf函数已经不在num所在的作用域当中了
}
  • 存储位置
    在这里插入图片描述
http://www.dtcms.com/a/336823.html

相关文章:

  • PyTorch数据处理工具箱详解|深入理解torchvision与torch.utils.data
  • Gemini CLI 系统配置小结
  • ±2cm精度破壁者:有鹿机器人如何重写清洁行业规则?
  • java自动化更新
  • Git+Jenkins 基本使用
  • Win11安装WSL、Docker Desktop
  • MySQL集群、分布式
  • 如何生成结婚登记档案目录套打文件
  • 上下文切换及线程操作相关内容
  • Zephyr 中 BT_GATT_SERVICE_DEFINE 使用详解
  • 信创产业:从技术突围到生态重构的强国之路
  • 云计算- KubeVirt 实操指南:VM 创建 、存储挂载、快照、VMI全流程 | 容器到虚拟机(镜像转换/资源调度)
  • Python之Django框架开发Web应用,并部署到服务器
  • 【LeetCode题解】LeetCode 74. 搜索二维矩阵
  • Gartner发布2025年AI与网络安全成熟度曲线:用AI增强网络安全计划的27项技术与创新
  • 作业标准化:制造企业的效率基石与品质保障
  • 2025 年世界职业院校技能大赛汽车制造与维修赛道高职组资讯整合
  • 线程生命周期:pthread_detach 和 pthread_join 区别梳理
  • 个人笔记SpringMVC
  • 宁波市第八届网络安全大赛初赛(REVERSE-Writeup)
  • 2025 年世界职业院校技能大赛汽车制造与维修赛道高职组比赛通知
  • 航空装备先进加工工艺与制造技术论坛——2025成都航空装备展
  • Python 作用域 (scope) 与闭包 (closure)
  • 【网络运维】Playbook项目实战:基于 Ansible Playbook 一键部署 LNMP 架构服务器
  • Java中抽象类与接口的区别
  • 【LeetCode 热题 100】198. 打家劫舍——(解法二)自底向上
  • dc_shell (六)
  • OpenCV---特征检测算法(ORB,Oriented FAST and Rotated BRIEF)
  • AI 对话高效输入指令攻略(五):AI+PicDoc文生图表工具:解锁高效图表创作新范式
  • Tmux Xftp及Xshell的服务器使用方法