[C初阶笔记]P1

什么是C语言

1、机器语言(二进制)>汇编语言(助记符)>高级语言(C、C++等)

2、c语言擅长底层软件开发(操作系统、驱动程序),并不意味着不能开发其他。

C语言更贴近操作系统,写出来的程序可以直接在操作系统上运行。

3、操作系统(软件)通过驱动程序(软件)控制硬件。

4、操作系统之上的是应用层,可装应用软件。

ANSI C

1、美国国家标准局制定标准语法,称为ANSI C,作为C语言最初的标准。

2、为所有人定制一个标准,让所有人交流起来时,表达的意思更加准确。

使用最广泛的标准是C89/C90。

第一个C程序

//standard input output.header
#include<stdio.h>//main函数主流写法
int main()
{printf("hello world!");return 0;
}//其他写法
void main()
int main(void)
int main(int argc,char* argv[])
//argument 参数
//argc表示参数个数(count)
//argv是所有参数构成的字符串数组(vector)

1、C语言程序是从主函数的第一行开始执行的,main函数是程序的入口。

这里的执行指的是生成可执行文件后,可执行文件的执行,不是指代码被编译的顺序。

2、一个项目中可以有多个.c源文件,但是在这多个.c文件中只能有一个.c文件 有且仅有一个main函数。

3、C语言项目中一般创建.c(源文件)用于函数实现 和 .h(头文件)用于函数声明

4、库函数:已经写好的函数,这些函数的功能是简单经常使用,所以当我们需要它的功能时可以直接调用,调用库函数时要包含对应的头文件。

数据类型

1、C语言提供的数据类型叫内置类型,我们也可以自己创造类型(即 自定义类型)。

2、不同数据类型的变量的大小

根据需求,选择对应的数据类型,可以节省空间,可以精确地描述事物属性,每种类型都有存在的意义。

 

  • C语言标准规定:sizeof(long)>=sizeof(int),所以long类型可能是4字节或者8字节,这取决于编译器。

  • float a=55.5f (带小数点的数默认是double类型,如果后面加上f就是告诉编译器a是个float型变量)

  • sizeof返回的是size_t是无符号整型,size_t是标准C库中定义的,在printf函数中的占位符应该使用%u。

  • long是long int的缩写,实际上可以理解为long ”修饰“ int。

局部变量/全局变量

1、局部变量:定义在{}内部,作用域就是最近的一个{}范围内。

#include<stdio.h>
int main()
{{int a=10;//只要放在大括号内部,就是局部变量。出了大括号范围,变量a就会被销毁。}printf("%d",a);//变量a在这里就是未声明的标识符return 0;
}

2、全局变量:定义在所有的{}之外,作用范围是整个工程。

全局变量使用起来方便,但是为了防止冲突和安全性,尽量避免定义使用全局变量。

3、局部变量与全局变量名字相同冲突时,局部变量优先使用。

#include<stdio.h>
int a=1000;//全局变量
int main()
{int a=100;//局部变量printf("%d",a);return 0;
}
  • 这里不能理解为全局变量a被覆盖,本质上是编译器优先去局部域寻找a,找不到再去全局域中寻找。

  • 不同域中的变量名可以相同

  • 任何情况下都不建议,局部变量名和全局变量名写成一样,因为写成一样后,想要使用全局变量时,可能不知道有个同名的局部变量存在,导致使用错误。

 

关于VS中scanf报错的问题

原因:

scanf函数不会关注数组的大小,会把输入的所有字符全部放进数组里面,当数组空间满了,依然继续往后越界存放数据。所以VS为了安全,不建议使用scanf函数,而是使用scanf_s函数代替。

int main()
{char arr[5];scanf("%s",arr);//输入abcdefghijk,末尾还有个'\0'。printf("%s\n",arr);//输出abcdefghijkreturn 0;
}

解决办法:

  1. VS中创建的.c文件其实是从newc++file.cpp文件中拷贝过来的。

  2. 用everything找到这个文件,将#define _CRT_SECURE_NO_WARNINGS 1放到第一行,然后保存。

  3. 如果没有权限保存,就把这个文件拷贝到桌面,从桌面打开修改保存,再把桌面这个文件拖回原来文件所在位置,并替换掉原来的文件。

  4. #define _CRT_SECURE_NO_WARNINGS 1类似于开头声明scanf是安全的,VS就不会报错了,但是scanf的函数功能没有变,使用时应当注意越界问题。

注意:

由于scanf_s函数只有VS中的msvc能够识别,别的编译器无法识别,所以如果使用它,则该代码就不具备跨平台性。而scanf函数是C语言标准中的函数,那么使用它,代码就具有跨平台性。(所以建议使用scanf,并且留意该函数的风险性)

作用域/生命周期

作用域:变量起作用的范围

局部变量作用域:变量所在的局部范围。

全局变量作用域:整个工程(在定义全局变量的文件之外的文件中使用前要用extern声明,并且extern声明的内容只在extern所在的作用域起作用)。

生命周期:变量 创建到销毁 之间的时间段

局部变量生命周期:进入作用域,生命周期开始,出作用域,生命周期结束。

全局变量生命周期:是整个程序的生命周期(main函数的生命周期)。

extern

1、extern声明外部符号

//test1.c
int a = 666;
void Print(int a, int b)
{printf("%d\n", a + b);
}
//test2.c
int main()
{extern int a;//声明本文件之外的全局变量printf("%d\n", a);
​extern void Print(int a, int b);//声明本文件之外的函数Print(6, 6);return 0;
}
  • 全局变量和函数都有外部连接属性,如果要在它们的定义之前或者其他文件中使用它们,就要先使用extern进行声明。

  • extern声明的内容只能在extern所在的作用域内起作用。

  • extern声明的格式,就是在原来的函数声明和变量声明的前面加extern。

  • 声明就是编译的时候告诉编译器,这个变量/函数是在其他文件定义的,接下来使用时,先别报错先允许编译通过,等到链接的时候去别的文件中引用过来使用。

声明/定义

1、声明不会分配空间,定义会分配空间。

2、声明可以重复,定义不能重复。

头文件中不要定义全局变量,如果定义了,当头文件被其他多个文件包含后,头文件会在这多个文件中展开,链接时.o文件都会合并到一起,这时全局域中会有多个相同的全局变量,继而产生冲突。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/82741.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VS通过TCPIP与visionpro通讯

效果图 服务器端 visionpro配置服务器端&#xff0c;配置端口号、需要发送的数据等 客户端 vs编写代码接收数据 主要是复制的例程&#xff0c;到时候编写的时候可以借鉴。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Dat…

《UNUX环境高级编程》(14)高级I/O

1、引言 2、 非阻塞I/O 系统调用分为两类&#xff1a;低速系统调用和其他系统调用。低速系统调用是可能会使进程永远阻塞的一类系统调用&#xff0c;包括&#xff1a; 如果某些文件类型&#xff08;如读管道、终端设备和网络设备&#xff09;的数据并不存在&#xff0c;读操作…

超导材料LK-99烧制工艺中高真空度及其气氛环境控制的解决方案

摘要&#xff1a;根据近期LK-99超导材料研究报道&#xff0c;我们分析此材料制备采用了真空烧结工艺。由于目前大部分复现研究所用的真空烧结技术和设备都非常简陋&#xff0c;使得LK-99的复现性很差。为此我们提出了真空度准确控制解决方案&#xff0c;其目的第一是实现烧结初…

网工内推 | 信息安全负责人,需8年安全经验,CISSP证书

01 上海鹰角网络 招聘岗位&#xff1a;信息安全负责人 职责描述&#xff1a; 1、负责公司总体的信息安全规划、信息安全管理体系、流程、制度的设计和优化&#xff0c;确保在运营、应用、信息和业务等方面的持续安全、稳定&#xff1b; 2、负责对系统&#xff0c;网络&#xf…

ad+硬件每日学习十个知识点(22)23.8.2(LDO datasheet手册解读)

文章目录 1.LDO的概述、features2.LDO的绝对参数&#xff08;功率升温和结温&#xff09;3.LDO的引脚功能4.LDO的电气特性5.LDO的典型电路&#xff08;电容不能真用1uF&#xff0c;虽然按比例取输出值&#xff0c;但是R2的取值要考虑释放电流&#xff09;6.LDO的开关速度和线性…

PoseFormer:基于视频的2D-to-3D单人姿态估计

3D Human Pose Estimation with Spatial and Temporal Transformers论文解析 摘要1. 简介2. Related Works2.1 2D-to-3D Lifting HPE2.2 GNNs in 3D HPE2.3 Vision Transformers 3. Method3.1 Temporal Transformer Baseline3.2 PoseFormer: Spatial-Temporal TransformerSpati…

人文景区有必要做VR云游吗?如何满足游客出行需求?

VR云游在旅游行业中的应用正在快速增长&#xff0c;为游客带来沉浸式体验的同时&#xff0c;也为文旅景区提供了新的营销方式。很多人说VR全景展示是虚假的&#xff0c;比不上真实的景区触感&#xff0c;人文景区真的有必要做VR云游吗&#xff1f;我的答案是很有必要。 如果你认…

【Windows】Windows开机密码重置

文章目录 前言一、问题描述二、操作步骤2.1 安装DaBaiCai_d14_v6.0_2207_Online.exe2.2 插入U盘2.3 打开大白菜&#xff0c;点击“一键制作USB启动盘”2.4 等待进度条走完2.5 重启电脑&#xff0c;开机按“F12”或者“F8”&#xff08;具体百度一下&#xff0c;对应品牌电脑开机…

MyCat配置文件schema.xml讲解

1.MyCat配置 1.1 schema标签 如果checkSQLschema配置的为false&#xff0c;那么执行DB01.TB_ORDER时就会报错&#xff0c;必须用use切换逻辑库以后才能进行查询。 sqlMaxLimit如果未指定limit进行查询&#xff0c;列表查询模式默认为100,最多只查询100条。因为用mycat后默认数…

JVM详情

JVM详情 一、JVM内存划分二、双亲委派模型&#xff08;重点考察&#xff09;三、 GC&#xff08;垃圾回收机制&#xff09;垃圾的判定算法垃圾回收算法 一、JVM内存划分 堆&#xff1a;存放new出来的对象&#xff1b;&#xff08;成员变量&#xff09; 方法区&#xff1a;存放…

LeetCode_01 精度丢失

1281. 整数的各位积和之差 给你一个整数 n&#xff0c;请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。 示例 输入&#xff1a;n 234 输出&#xff1a;15 解释&#xff1a; 各位数之积 2 * 3 * 4 24 各位数之和 2 3 4 9 结果 24 - 9 15示例 …

C++20协程

目录 协程原理&#xff1a; 进程、线程和协程的区别和联系​编辑 协程在IO多路复用中 协程的目的&#xff1a; 协程的优势&#xff1a; ​ 协程原理&#xff1a; &#xff08;学习来源&#xff1a;幼麟实验室&#xff09; 线程是进程中的执行体&#xff0c;拥有一个…

RISCV 5 RISC-V调用规则

RISCV 5 RISC-V调用规则 1 Register Convention1.1 Integer Register Convention1.2 Floating-point Register Convention 2. Procedure Calling Convention2.1 Integer Calling Convention2.2 Hardware Floating-point Calling Convention2.3 ILP32E Calling Convention2.4 Na…

现代C++中的从头开始深度学习【1/8】:基础知识

一、说明 提及机器学习框架与研究和工业的相关性。现在很少有项目不使用Google TensorFlow或Meta PyTorch&#xff0c;在于它们的可扩展性和灵活性。也就是说&#xff0c;花时间从头开始编码机器学习算法似乎违反直觉&#xff0c;即没有任何基本框架。然而&#xff0c;事实并非…

正则表达式的使用

1、正则表达式-教程 正则表达式&#xff1a;文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a到z之间的字母&#xff09;和特殊字符&#xff08;称为元字符&#xff09;。 正则表达式使用单个字符串来描述&#xff0c;匹配一系列匹配某个句法规则的字符串。 2、…

A2C原理和代码实现

参考王树森《深度强化学习》课程和书籍 1、A2C原理&#xff1a; Observe a transition&#xff1a; ( s t , a t , r t , s t 1 ) (s_t,{a_t},r_t,s_{t1}) (st​,at​,rt​,st1​) TD target: y t r t γ ⋅ v ( s t 1 ; w ) . y_{t} r_{t}\gamma\cdot v(s_{t1};\mathbf…

如何在Spring MVC中使用@ControllerAdvice创建全局异常处理器

文章目录 前言一、认识注解&#xff1a;RestControllerAdvice和ExceptionHandler二、使用步骤1、封装统一返回结果类2、自定义异常类封装3、定义全局异常处理类4、测试 总结 前言 全局异常处理器是一种 &#x1f31f;✨机制&#xff0c;用于处理应用程序中发生的异常&#xff…

ROS入门核心教材重要节选

ROS核心教程 1、文件系统 使用下述命令查看包 rospack ros pack(age&#xff09; 如rospack find roscpp roscd ros cd 如roscd roscpp rosls ros ls 如rosls roscpp2、ROS节点 节点可以理解为人工定义一个机器人模块&#xff0c;然后抽象成可执行文件。 rosnode li…

TCP的四次挥手与TCP状态转换

文章目录 四次挥手场景步骤TCP状态转换 四次挥手场景 TCP客户端与服务器断开连接的时候&#xff0c;在程序中使用close()函数&#xff0c;会使用TCP协议四次挥手。 客户端和服务端都可以主动发起。 因TCP连接时候是双向的&#xff0c;所以断开的时候也是双向的。 步骤 三次…

LabVIEW开发3D颈动脉图像边缘检测

LabVIEW开发3D颈动脉图像边缘检测 近年来&#xff0c;超声图像在医学领域对疾病诊断具有重要意义。边缘检测是图像处理技术的重要组成部分。边缘包含图像信息。边缘检测的主要目的是根据强度和纹理等属性识别图像中均匀区域的边界。超声&#xff08;US&#xff09;图像存在视觉…