当前位置:网站首页>C语言的查漏补缺(1)
C语言的查漏补缺(1)
2022-07-23 18:07:00 【渡上舟(每天都要坚持学习鸭)】
目录
4.2 变量的作用域:变量在哪里可以使用,哪里就是它的作用域
1. 关于main函数
C语言规定main函数是程序的入口,main函数有且仅有一个。

2. 关于输出格式
- %c - 字符
- %d - 按照 有符号十进制整数 的格式输出
- %ld - 输出长整型数据
- %u - 无符号十进制整数
- %zu - 打印一个sizeof返回的无符号整型
- %o - 无符号八进制整数 (如:0123)
- %x(%X) - 无符号十六进制整数(如:0x1234)
- %f - 单精度浮点数(float)
- %lf - 双精度浮点数(double)
- %p - 指针
- %s - 字符串
3. 关于数据类型
3.1 计算机中的单位

3.2 关于sizeof
sizeof - 是C语言的一种单目操作符,不是函数,以字节的形式给出其操作数的存储大小。存储大小以操作数的类型决定。即计算操作数在内存中所占空间的大小
3.3 数据类型的大小
#include <stdio.h>
int main()
{
printf("%zu\n", sizeof(char));//1个字节
printf("%zu\n", sizeof(short));//2
printf("%zu\n", sizeof(int));//4 32个bit
printf("%zu\n", sizeof(long));//4或8
printf("%zu\n", sizeof(long long));//8
printf("%zu\n", sizeof(float));//4
printf("%zu\n", sizeof(double));//8
return 0;
}C语言规定,sizeof(long)>=sizeof(int)就可以,所以long的大小可以是4个字节,也可以是8个字节。
3.4 类型的使用
类型是用来创建变量的,创建变量的本质是向内存申请空间,来存放数据。
如:
#include <stdio.h>
int main()
{
//创建int类型的变量age
int age = 20;
//向内存申请4个字节的空间来存放整数20
return 0;
}4. 变量
4.1 变量的分类
- 局部变量 - { }内部定义的变量
- 全局变量 - { }外部定义的变量
4.2 变量的作用域:变量在哪里可以使用,哪里就是它的作用域
- 局部变量的作用域:变量所在的局部范围
- 全局变量的作用域:整个工程
4.3 变量的一些注意事项
(!!!)在同一个范围内,变量只能定义一次,不能重复定义。
#include <stdio.h>
int main()
{
int a = 10;
int a = 100;//错,在同一个范围内,变量不能重复定义
return 0;
}
(!!!)不同局部范围内的变量名可以相同
下面代码属于两个局部范围了,因为局部变量的作用域是变量所在的局部范围,出了作用域变量就销毁了(int a = 100就销毁了)。所以在每一个局部范围都定义一个相同的变量是可以的。这个变量只在这个范围内有效。
#include <stdio.h>
void test()
{
int a = 100;
}
int main()
{
int a = 10;
test();
printf("%d\n",a);
return 0;
} 
#include <stdio.h>
int main()
{
int a = 9;
{
int a = 8;
printf("%d\n",a);
}
printf("%d\n", a);
}局部变量的作用域是变量所在的局部范围。不同局部范围内定义相同的变量是可以的。
且遵循“就近原则”。
(!!!)全局变量和局部变量的名字可以相同。
【因为 全局变量 和 局部变量 在内存中存储的位置是不同的:全局变量储存在 “静态区”,而 局部变量存储在 “栈区”】它们是相互独立的存在,它们的同时存在也不会相互影响,所以全局变量和局部变量的名字可以相同。
当全局变量和局部变量名字相同的情况下,局部变量优先;
但是建议不要将全局和局部变量的名字写成一样
#include <stdio.h>
int a = 100;
int main()
{
int a = 10;
printf("%d\n",a);//10
//当全局变量和局部变量名字相同的情况下,局部变量优先
//但是建议不要将全局和局部变量的名字写成一样
return 0;
}4.4 例题(注意事项的结合)
#include <stdio.h>
int x = 5, y = 7;
void swap()
{
int z;
z = x;
x = y;
y = z;
}
int main()
{
int x = 3, y = 8;
swap();
printf("%d,%d\n",x, y);
return 0;
}因为main()函数中的x,y是局部变量,全局变量和局部变量名字相同时,局部变量优先,所以x=3,y=8;
又因为swap()函数中也是局部变量,局部变量出了作用域就销毁了,所以并不会对main()函数中的x,y造成改变。
所以最终的输出结果是x=3,y=8。

边栏推荐
- As a background developer, you must know two kinds of filters
- Tree learning summary
- USB3.0:VL817Q7-C0的LAYOUT指南
- R language mapping: coordinate axis setting
- [Nuxt 3] (九)服务器路由
- FormatDateTime的用法
- PowerCLi 管理VMware vCenter 一键批量部署OVA
- [C language] program environment and preprocessing
- Socat uses "suggestions collection"
- 树莓派ssh登录
猜你喜欢

Alibaba's latest masterpiece! It took 187 days for the liver to come out. 1015 pages of distributed full stack manuals are so delicious

【leetcode天梯】链表 · 022 链表中倒数第k个节点

UPC 2022 summer personal training game 12 (number of combinations b)

Industry analysis | logistics intercom

ES6其他语法及扩展语法总结
![二叉树高度 [log2n]+1与log2(n+1)是否相等](/img/64/381376190218d5b2cdfd8b1197e8f6.png)
二叉树高度 [log2n]+1与log2(n+1)是否相等

入门数据库days1

elk笔记25--快速体验APM

PC性能监测工具,软件测试人员不可或缺的好帮手

selenium中元素定位正确但是操作失败,6种解决办法全稿定
随机推荐
MySQL读写分离的三种实现方案
二叉树高度 [log2n]+1与log2(n+1)是否相等
selenium中元素定位正确但是操作失败,6种解决办法全稿定
LeetCode刷题:回文数
BoundsChecker用法「建议收藏」
Analyse de l'industrie | interphone logistique
R语言使用tidyr包的gather函数将从宽表转化为长表(宽表转化为长表)、第一个参数指定原多个数据列名称生成的新数据列名称、第二个参数指定原表内容值、第三个和第四个参数指定不变的列名称列表
DHCP:在网络中防止 Rogue DHCP Server
记一次被网络诈骗的经历
Four rotor aircraft 1 - structure and control principle
According to the e-commerce written on the resume, how does redis realize inventory deduction and prevent oversold?
H7-TOOL的I2C接口方式脱机烧录操作方法,已经发布(2022-07-16)
You must execute multiple requests and catch errors. Using try catch is not elegant
What are offline data and real-time data
PowerCLi 管理VMware vCenter 一键批量部署OVA
作为一名后台开发人员,你必须知道的两种过滤器
【leetcode天梯】链表 · 022 链表中倒数第k个节点
Brief analysis of compiling principle of.Net CLR R2R
J9数字论:数字行业的FOMO现象我们应该怎么克服?
R语言使用quantile函数计算向量数据或者dataframe指定数据列的分位数(百分位数)