前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我与C语言二周目邂逅vlog——2.数据类型和变量

我与C语言二周目邂逅vlog——2.数据类型和变量

作者头像
用户11286441
发布2024-09-23 18:58:55
920
发布2024-09-23 18:58:55
举报
文章被收录于专栏:学习

1. 数据类型介绍

C语⾔提供了丰富的数据类型来描述⽣活中的各种数据。 使⽤整型类型来描述整数,使⽤字符类型来描述字符,使⽤浮点型类型来描述⼩数。 所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据

下⾯盘点⼀下C语⾔提供的各种数据类型

1.1 各种数据的长度 

1.sizeof操作符

sizeof 是⼀个关键字,也是操作符,专⻔是⽤来计算sizeof的操作符数的类型⻓度的,单位是字 节。 sizeof 操作符的操作数可以是类型,也可是变量或者表达式

1.sizeof 后边的表达式是不真实参与运算的,根据表达式的类型来得出⼤⼩;!!!!!! 2.sizeof 的计算结果是 size_t 类型的 3.对应当前系统的 sizeof 的返回值类型,可能是 unsigned int ,也可能是unsigned long long 

代码语言:javascript
复制
#include <stdio.h>
int main()
{
 printf("%zd\n", sizeof(char));
 printf("%zd\n", sizeof(_Bool));
 printf("%zd\n", sizeof(short));
 printf("%zd\n", sizeof(int));
 printf("%zd\n", sizeof(long));
 printf("%zd\n", sizeof(long long));
 printf("%zd\n", sizeof(float));
 printf("%zd\n", sizeof(double));
 printf("%zd\n", sizeof(long double));
 return 0;
}

在VS2022 X64配置下的输出:

1 1 2 4 4 8 4 8 8

1.5.3 sizeof 中表达式不计算

代码语言:javascript
复制
#include <stdio.h>
int main()
{
 short s = 2;
 int b = 10;
 printf("%d\n", sizeof(s = b+1));
 printf("s = %d\n", s);
 return 0;
}

 sizeof 在代码进⾏编译的时候,就根据表达式的类型确定了,类型的常⽤,⽽表达式的执⾏却要在 程序运⾏期间才能执⾏,在编译期间已经将sizeof处理掉了,所以在运⾏期间就不会执⾏表达式了。

2.变量 

2.1变量的分类

全局变量:在⼤括号外部定义的变量就是全局变量 全局变量的使⽤范围更⼴,整个⼯程中想使⽤,都是有办法使⽤的。 • 局部变量:在⼤括号内部定义的变量就是局部变量 局部变量的使⽤范围是⽐较局限,只能在⾃⼰所在的局部范围内使⽤的

如果局部和全局变量,名字相同呢?

代码语言:javascript
复制
#include <stdio.h>
int n = 1000;
int main()
{
 int n = 10;
 printf("%d\n" n);//打印的结果是多少呢?
 return 0;
}

 其实当局部变量和全局变量同名的时候,局部变量优先使⽤!!!!!!

2.2 变量的存储位置

全局变量和局部变量在内存中存储在哪⾥呢?

⼀般我们在学习C/C++语⾔的时候,我们会关注 内存中的三个区域:栈区堆区静态区

1. 局部变量是放在内存的栈区 2. 全局变量是放在内存的静态区 3. 堆区是⽤来动态内存管理的(后期会介绍)

 3.scanf 和 printf 介绍

3.1 printf 

printf() 的作⽤是将参数⽂本输出到屏幕。它名字⾥⾯的 f 代表 format (格式化),表⽰可以 定制输出⽂本的格式

3.1.1 占位符

There are %d apples\n 是输出⽂本,⾥⾯的 %d 就是占位符,表⽰这个位置要 ⽤其他值来替换。占位符的第⼀个字符⼀律为百分号 % ,第⼆个字符表⽰占位符的类型, %d 表⽰这 ⾥代⼊的值必须是⼀个整数。 

占位符列举

• %a :⼗六进制浮点数,字⺟输出为⼩写。 • %A :⼗六进制浮点数,字⺟输出为⼤写。 • %c :字符。 • %d :⼗进制整数。// int • %e :使⽤科学计数法的浮点数,指数部分的 e 为⼩写。 • %E :使⽤科学计数法的浮点数,指数部分的 E 为⼤写。 • %i :整数,基本等同于 %d 。 • %f :⼩数(包含 float 类型和 double 类型)。//float %f double - %lf • %g :6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的 e为小写 • %G :等同于 %g ,唯⼀的区别是指数部分的 E 为⼤写。 • %hd :⼗进制 short int 类型。 • %ho :⼋进制 short int 类型。 • %hx :⼗六进制 short int 类型。 • %hu :unsigned short int 类型。 • %ld :⼗进制 long int 类型。 • %lo :⼋进制 long int 类型。 • %lx :⼗六进制 long int 类型。 • %lu :unsigned long int 类型。 • %lld :⼗进制 long long int 类型。 • %llo :⼋进制 long long int 类型。 • %llx :⼗六进制 long long int 类型。 • %llu :unsigned long long int 类型。 • %Le :科学计数法表⽰的 long double 类型浮点数。 • %Lf :long double 类型浮点数。 • %n :已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。 • %o :⼋进制整数。 • %p :指针(⽤来打印地址)。 • %s :字符串。 • %u :⽆符号整数(unsigned int)。 • %x :⼗六进制整数。 • %zd : size_t 类型。 • %% :输出⼀个百分号。

2.输出格式

(1)printf() 允许限定占位符的最⼩宽度。 !!!!!

printf("%5d\n", 123);

%5d 表⽰这个占位符的宽度⾄少为5位。如果不满5位,对应的值的前⾯添加空格。 输出的值默认是右对⻬,即输出内容前⾯会有空格;如果希望改成左对⻬,在输出内容后⾯添加空 格,可以在占位符的 % 的后⾯插⼊⼀个 - 号。

对于⼩数,这个限定符会限制所有数字的最⼩显⽰宽度。 

printf("%12f\n", 123.45);

上⾯⽰例中, %12f 表⽰输出的浮点数最少要占据12位。由于⼩数的默认显⽰精度是⼩数点后6位, 所以 123.45 输出结果的头部会添加2个空格。

(2)限定⼩数位数

printf("Number is %.2f\n", 0.5)

如果希望⼩数点后⾯输出3位( 0.500 ),占位符就要写成 %.3f 。 

 3.2.scanf

1.scanf() 函数⽤于读取⽤⼾的键盘输⼊。 程序运⾏到这个语句时,会停下来,等待⽤⼾从键盘输⼊。 ⽤⼾输⼊数据、按下回⻋键后, scanf() 就会处理⽤⼾的输⼊,将其存⼊变量。 它的原型定义在头⽂件 stdio.h 。 scanf() 的语法跟 printf() 类似。

scanf() 处理数值占位符时,会⾃动过滤空⽩字符,包括空格制表符换⾏符等。

解读⽤⼾输⼊时,会从上⼀次解读遗留的第⼀个字符开始,直到读完缓存,或者遇到第⼀个不符合条 件的字符为⽌。

例:

// ⽤⼾输⼊ " -13.45e12# 0"

scanf("%d", &x);

printf("%d\n", x);

scanf("%f", &y);

printf("%f\n", y);

 scanf() 读取⽤⼾输⼊时, 1. %d 占位符会忽略起⾸的空格,从 - 处开始获取数据,读 取到 -13 停下来,因为后⾯的 . 不属于整数的有效字符。这就是说,占位符 %d 会读到 -13 。 2. 第⼆次调⽤ scanf() 时,就会从上⼀次停⽌解读的地⽅,继续往下读取。这⼀次读取的⾸字符 是 . ,由于对应的占位符是 %f ,会读取到 .45e12 ,这是采⽤科学计数法的浮点数格式。后⾯的 # 不属于浮点数的有效字符,所以会停在这⾥

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 数据类型介绍
    • 1.1 各种数据的长度 
    • 2.变量 
      • 2.1变量的分类
        • 2.2 变量的存储位置
        •  3.scanf 和 printf 介绍
          • 3.1 printf 
            •  3.2.scanf
            相关产品与服务
            对象存储
            对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档