[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; }
解决办法:
VS中创建的.c文件其实是从newc++file.cpp文件中拷贝过来的。
用everything找到这个文件,将#define _CRT_SECURE_NO_WARNINGS 1放到第一行,然后保存。
如果没有权限保存,就把这个文件拷贝到桌面,从桌面打开修改保存,再把桌面这个文件拖回原来文件所在位置,并替换掉原来的文件。
#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文件都会合并到一起,这时全局域中会有多个相同的全局变量,继而产生冲突。
相关文章:

[C初阶笔记]P1
什么是C语言 1、机器语言(二进制)>汇编语言(助记符)>高级语言(C、C等) 2、c语言擅长底层软件开发(操作系统、驱动程序),并不意味着不能开发其他。 C语言更贴近操作…...
外企面试题
Interview Prepare is there anyone we can talk to for a character reference? yes, I have some teammate can help to provide related working information. why did you leave/quit your last job? I got blocked on my last job. I found I cant learn new things fr…...
【目标检测系列】YOLOV1解读
前言 从R-CNN到Fast-RCNN,之前的目标检测工作都是分成两阶段,先提供位置信息在进行目标分类,精度很高但无法满足实时检测的要求。 而YoLo将目标检测看作回归问题,输入为一张图片,输出为S*S*(5*BC)的三维向量。该向量…...

Sentieon | 每周文献-Multi-omics(多组学)-第九期
多组学系列文章-1 标题(英文): Prediction of axillary lymph node metastasis in triple-negative breast cancer by multi-omics analysis and an integrated model标题(中文): 基于多组学分析和综合模型…...
CSDN竞赛70期
CSDN竞赛70期 CSDN竞赛70期1.小张的手速大比拼分析代码 2.坐公交分析代码 3.三而竭分析代码 4.争风吃醋的豚鼠分析代码 CSDN竞赛70期 1.小张的手速大比拼 在很久很久以前,小张找到了一颗有 N 个节点的有根树 T 。 树上的节点编号在 1 到 N 范围内。 他很快发现树上…...

mac安装vscode 配置git
1、安装vscode 官网地址 下载mac稳定版安装很慢的解决办法 (转自) mac电脑如何解决下载vscode慢的问题 选择谷歌浏览器右上角的3个点,选择下载内容,右键选择复制链接地址,在新窗口粘贴地址, 把地址中的一段替换成下面的vscode.cd…...

UI自动化环境的搭建(python+pycharm+selenium+chrome)
最近在做一些UI自动化的项目,为此从环境搭建来从0到1,希望能够帮助到你,同时也是自我的梳理。将按照如下进行开展: 1、python的下载、安装,python环境变量的配置。 2、pycharm开发工具的下载安装。 3、selenium的安装。…...

AbstractQueuedSynchronizer
目录 AQS是什么AQS什么样内部类成员变量方法public如果不使用AQS会怎样 AQS的应用ReentrantLockSyncNonfairSyncFairSync 其他实现 AQS是什么 AbstractQueuedSynchronizer(AQS)是Java中的一个并发工具,位于java.util.concurrent.locks包中&a…...

谈谈什么是云计算?以及它的应用
作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 目录 编辑 一、什么是云计算 二、云计算的优势与劣势? 1、云计算的优势 ①提高资源利用率 ②提升效率 ③降低成本 2、云…...
【BASH】回顾与知识点梳理(十六)
【BASH】回顾与知识点梳理 十六 十六. 十二至十五章知识点总结及练习16.1 总结16.2 练习16.3 简答题 该系列目录 --> 【BASH】回顾与知识点梳理(目录) 十六. 十二至十五章知识点总结及练习 16.1 总结 绝对路径:『一定由根目录 / 写起』…...

docsify gitee 搭建个人博客
docsify & gitee 搭建个人博客 文章目录 docsify & gitee 搭建个人博客1.npm 安装1.1 在Windows上安装npm:1.2 在macOS上安装npm:1.3 linux 安装npm 2. docsify2.1 安装docsify2.2 自定义配置2.2.1 通过修改index.html,定制化开发页面…...

SpringBoot2-Tomcat部署
1.排除内置 Tomcat 在pom.xml文件中的下添加以下代码,用于排除SpringBoot内置Tomcat <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion&…...

Docker查看、创建、进入容器相关的命令
1.查看、创建、进入容器的指令 用-it指令创建出来的容器,创建完成之后会立马进入容器。退出之后立马关闭容器。 docker run -it --namec1 centos:7 /bin/bash退出容器: exit查看现在正在运行的容器命令: docker ps查看历史容器࿰…...
leetcode1. 两数之和
题目:leetcode1. 两数之和 描述: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中…...

温室花卉种植系统springboot框架jsp鲜花养殖智能管理java源代码
本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 基于Git无线传感网络的温室花卉种植智能控制系统 系统…...

测试老鸟经验总结,Jmeter性能测试-重要指标与性能结果分析(超细)
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Aggregate Report …...

IDEA设置Maven自动编译model
IDEA设置Maven自动编译model 项目工程结构IDEA maven设置 项目工程结构 假设我们的项目结构是下图这样,也就是一个父工程下包含多个子模块,其中dubbo-01-api是公共模块,其它两个模块要想使用必须在pom文件中引入。 本地开发要想不会报错&am…...
关于本地mockjs的使用
安装mockjs npm install mockjs -s在src下新建目录mockData,所有mock请求可以放该文件夹下面。例如在mockData文件夹下新建一个home.js文件。用来处理首页的请求数据 home.js export default {getHomeData:()>{return{code:200,data:{tableData:[{name:张三,se…...

hive 中最常用日期处理函数
hive 常用日期处理函数 在工作中,日期函数是提取数据计算数据必须要用到的环节。哪怕是提取某个时间段下的明细数据也得用到日期函数。今天和大家分享一下常用的日期函数。为什么说常用呢?其实这些函数在数据运营同学手上是几乎每天都在使用的。 技术交…...

记录一下Java实体转json字段顺序问题
特殊需求,和C交互他们那边要求字段顺序要和他们定义的一致(批框架) 如下: Data public class UserDto {private String name;private Integer age;private String addr; }未转换前打印: 转换后打印: 可以看到转换为json顺序打印…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...

Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...