c语言开篇---跟着视频学C语言
标识符

标识符必须声明定义,可以是变量、函数或其他实体。

Int是标识符吗?
不是,int是c语言关键词,不是随意命名的

C语言关键词如下:
常量
不需要被声明,不能赋值更改。
printf函数
printf是由print打印和format格式,占位符打印
定义写在<stdio.h>当中。

整数数据类型
定义不同整型原因:占用内存大小不一样,表示数据范围不一样。



char、short、int、long、longlong占用字节和数值范围:
c语言并未规定数据类型的大小范围,具体实现交由编译器和平台决定
sizeof(测量实体占用字节大小)
占用字节越大可表示范围越大。


不要最高位作为符号位 unsigned。

1~5以看完。浮点类型
浮点类型float
%d占位符用于整型,%f占位符用于浮点型。
float至少能表示6位有效数字。
浮点类型double
比float精度更高的类型,双精度浮点型double。
浮点类型所占字节
浮点类型,精度越高,范围越大,所占字节越大。
float 4;double 8字节。
变量常量
变量:可以改变并且有可能变化的。
常量:没有变化且不能变化的。
声明变量:
标识符:由自己命名的标志,表示变量、函数或其他实体的名称。
标识符命名规则:1、只能由大小写英文字母、数字或下划线组成。
2、标识符不能以数字开头。
3、标识符不能是已有关键字。
关键词:C语言标准规定,有特殊意义和用途,可以直接在程序中被使用。比如:short、int、long 、float、double。
声明变量公式:【数据类型+标识符名+分号】。先声明在使用!!!
变量初始化和赋值方法:
1、变量声明后,立即初始化。
int a=100;
printf("%d\n",a);
2、变量先声明在变量赋值。
int a;
a=100;
printf("%d\n",a);
注:变量可以多次赋值,但不能多次初始化。
常量
字面常量无需声明,编译器可判断类型。
符号常量:
#define 符号常量 值
字符类型变量与常量
字符常量是由单引号包括的。
例如: 'a'
占位符
整数类型 %d 浮点类型 %f 字符类型 %c
字符类型占用空间:

字符变量:char
字符和数值存在一一对应的映射关系,被称为美国信息交换标准代码即ASCII码。
字符类型仅需要一个字节可以正常存储。
字符类型就是整型类型 字符类型只占用一个字节 字符类型命名为char
\n为换行符,\n表示结束一行打印,并从下一行开始打印。
例题:
定义一个字符变量letter,将其初始化为大写字母A。通过ASCII中的关系,将大写字母A,变成小写字母A,并将小写字母A打印出来。
#include <stdio.h>
int main ()
{
char letter ='A';
letter =letter+32;
printf("letter =%c",letter);
return 0;
}

数值0:用于标识字符串结束。
转义字符:\
\数值(八进制):转义字符
printf("hello\0world");
打印hello
printf("\110\145\154\154\157");
也是打印hello
printf("hello\12world");
打印hello
world
效果等同于\n
printf


无符号整型占位符:%u
精度
最小字段宽度
使用最小字段宽度 如果指定标志0,则会用0来补齐最小宽度。
6~10
scanf(用于输入)

_CRT_SECURE_NO_WARNINGS


scanf将输入的字符串按照对应的转换规范进行转换。
转换完成后的二进制,将依次存放到后续参数的变量地址中。



输入字符串
#include <stdio.h>
int main()
{
char str[10];
scanf("%s",str);
printf("%s",str);
return 0;
}
输入字符
#include <stdio.h>
int main()
{
char c;
scanf("%c",&c);
printf("%d %c\n",c,c);
return 0;
}
运算符12
指针


取地址运算符&
&数据对象 获取数据对象首地址和所需储存空间大小
指针类型
目标数据类型 * 变量名 声明指针
指针类型的值是目标数据对象首地址。
数据对象的空间大小存储在哪?
首地址可以复制,指针类型改变,导致数据长度改变,因此无法正确复制。
指针类型是通过值来保存目标数据对象的首地址,通过类型本身来标记目标数据对象的空间大小。
取值运算符 *
*指针 根据指针中存储的首地址和空间大小找到目标数据对象。
指针所占用的字节大小,还和编译器或者编译配置有关。
指针访问数组
第一个元素获取数组首地址。
取值运算符的优先级高于算术运算符。
数组名获取数组首地址。
数组名出现在表达式中,数组名将会转化为指向数组第一个元素的指针。
比如:arr+1等同于&arr[0]+1 例外:1、对数组名使用sizeof时2、对数组名使用取地址运算符&时
下标运算符最终会展开为指针的形式。

指针作为参数进行传递

指针的指针(多级指针)
int *数据对象的指针被称为【二级指针】
多维数组
指针数组 int* pB[10] 数组指针 目标类型 (*变量名)[元素个数]
数组指针的移动和取值
35
字符串处理函数
#include "string.h"
strlen:获取字符数组中字符串 的长度
strcat:字符串拼接函数,将源字符串拼接到目标字符串后面
strcpy:字符串复制函数,将源字符串复制到目标字符串中
strcmp:字符串比较函数,,比较两个字符串,一致返回0 ,不同1、-1
37
指针实现字符串处理函数
#include <stdio.h>
size_t mstrlen(const char *str)
{
if(str=NULL)
{
return 0;
}
size_t len =0;
while(*str !='\0')
{
len++;
str++;
}
return len;
}
int main()
{
size_t len;
len =mstrlen(NULL);
printf("%d\n",len);
len =mstrlen("");
printf("%d\n",len);
len =mstrlen("HELLO");
printf("%d\n",len);
return 0;
}
#include "stdio.h"
char * mstrcat(char * destination ,const char * source)
{
if(destination == NULL)
{
return NULL;
}
if(source == NULL)
{
return destination;
}
char *ret =destination;//保存字符串首地址
while (*destination !='\0')
{
destination++;
}
while(*source !='\0')
{
*destination =*source;//把source追加到destination后面。
destination++;
source++;
}
*destination ='\0';
return ret;
}
int mstrcmp(const char *str1,const char *str2)
{
if(str1==NULL && str2 == NULL)
{
return 0;
}
if(str1 !=NULL && str2 ==NULL)
{
return 1;
}
if(str1 == NULL && str2!==NULL)
{
return -1;
}
int ret =0;
while (1)
{
if(*str1 !=*str2)
{
if(*str1 > *str2)
{ret = 1;
}
else
{
ret =-1;
}
break;
}
else
{
if(*str1 == '\0' && *str2 == '\0')
{
break;
}
str1++;
str2++;
}
}
return ret;
}
初识结构化数据
指向结构的指针

联合 union
结构体与联合体


内存对齐!

联合共用。
枚举enum
枚举会从0开始,依次递增。
若想从1开始递增
enum msgType{
eInteger=1;
eFloat,
eString
};
标识符的作用域
内层作用域将覆盖外层作用域。
预处理指令
取消宏定义 #define NUM 1 #undef NUM #define NUM 3
typedef关键词
定义数据类型别名
经常用于结构

typedef没有创建任何新类型,只是为某个已存在的类型增加了一个方便的别名
typedef与#define的区别
#define可以为值设置一个别名,而typedef不行 例如: #define PI 3.1415926 #define由预编译器处理,并且修改替换代码,typedef不受预处理影响,在编译时由编译器处理 #define也能为类型定义别名,但某些情况下,使用typedef更合适 例如: typedef char *STRINGSTRING name1,name2;
整型类型的别名无需自己定义,编译器会根据平台的整型范围大小,设置对应的别名。头文件:stdint.h

printf的转换规范如何保证可移植性?
头文件 inttype.h
预处理中的分支结构
#if 常量表达式 在编译前,由处理器处理,根据分支走向,保留需要走向分支的代码,删除被跳过分支的代码。 #if #else #elif #ifdef #ifndef
#ifdef #ifndef



还可以使用#if defined(宏)或 #elif defined(宏)
#include
#include <文件夹> 在编译器的包含目录中搜索文件,< >编译器自带文件,在编译器的包含目录中 #include "文件名" 先在当前目录中搜索文件,再到编译器的包含目录中搜索文件
多文件代码
存储类别
声明在代码块内的任何变量,都属于自动存储类别的变量。
指明一个变量属于自动存储类别 auto
n的生命期----数据对象从创建到销毁之间。数据对象存在的周期。
n的作用域----标识符对数据对象指代关系存在的区域,它是一种关联关系。
自动变量拥有块内作用域及生命期。---局部变量
文件操作
fopen
相关文章:
c语言开篇---跟着视频学C语言
标识符 标识符必须声明定义,可以是变量、函数或其他实体。 Int是标识符吗? 不是,int是c语言关键词,不是随意命名的 C语言关键词如下: 常量 不需要被声明,不能赋值更改。 printf函数 printf是由print打印…...
本地yum源-如学
学不学? 如学~ 到底学不学? 如学~ 学? 如学~ 配置本地的镜像yum 使用到的 rpm 包 是根据centos8 里面自带的 在 /dev/cdrom 中包含着 一些系统自带的 rpm # 先将 /dev/cdrom 设备进行挂载 mkdir /up # 在…...
【实训】“宅急送”订餐管理系统(程序设计综合能力实训)
👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》 🌝每一个不曾起舞的日子,都是对生命的辜负 前言 大一小学期,我迎来了人生中的第一次实训…...
openeuler上安装polarismesh集群
1、安装MySQL数据库 数据库连接地址10.10.10.168 用户root 密码123456 MySQL安装参考搭建DSS环境(六)之安装基础环境MySQL_linux安装dss_青春不流名的博客-CSDN博客 2、安装Redis集群 IPResid PORTSentinel PORTPASSWORDCluster NAME10.10.10.110637…...
Java基础——stream
流 stream是什么?stream优点stream和集合的区别stream的创建steam的操作从steam中取值 stream是什么? stream可以简化对集合的操作,具体操作由流内部实现,而无需用户自行实现过程 stream优点 对于以下ArrayList List<Strin…...
Spring Quartz 持久化解决方案
Quartz是实现了序列化接口的,包括接口,所以可以使用标准方式序列化到数据库。 而Spring2.5.6在集成Quartz时却未能考虑持久化问题。 Spring对JobDetail进行了封装,却未实现序列化接口,所以持久化的时候会产生NotSerializable问题&…...
基于Java+SpringBoot+Vue前后端分离火锅店管理系统设计和实现
博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…...
Unity——导航系统补充说明
一、导航系统补充说明 1、导航与动画 我们可以通过设置动画状态机的变量,让动画匹配由玩家直接控制的角色的移动。那么自动导航的角色如何与动画系统结合呢? 有两个常用的属性可以获得导航代理当前的状态: 一是agent.velocity,…...
nginx实现负载均衡load balance
目录 nginx实现负载均衡load balance相关算法负载均衡https的访问后端的real server是否知道真正访问的用户的IP地址健康检查提升负载均衡的并发数量七层负载均衡和四层负载均衡七层负载均衡四层负载均衡四层和七层的区别502错误 nginx实现负载均衡load balance 准备ÿ…...
淘宝订单接口:连接消费者与商家的桥梁
当我们谈论淘宝订单接口时,我们谈论的是淘宝网为卖家和买家提供的一个用于处理订单的核心系统。通过这个接口,卖家可以接收订单、处理订单状态,并更新买家和平台的状态信息;买家则可以实时追踪自己的订单状态,更好地掌…...
数据结构-第一期——数组(Python)
目录 00、前言: 01、一维数组 一维数组的定义和初始化 一维变长数组 一维正向遍历 一维反向遍历 一维数组的区间操作 竞赛小技巧:不用从a[0]开始,从a[1]开始 蓝桥杯真题练习1 读入一维数组 例题一 例题二 例题三 实战训…...
八 动手学深度学习v2 ——卷积神经网络之卷积+填充步幅+池化+LeNet
目录 1. 图像卷积总结2. 填充和步幅 padding和stride3. 多输入多输出通道4. 池化层5. LeNet 1. 图像卷积总结 二维卷积层的核心计算是二维互相关运算。最简单的形式是,对二维输入数据和卷积核执行互相关操作,然后添加一个偏置。核矩阵和偏移是可学习的参…...
SparkCore
第1章 RDD概述 1.1 什么是RDD RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象。代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。 RDD类比工厂生产。 …...
配置 Windows 系统环境变量
直接按键盘上面的 WINS 打开 Windows 搜索 搜索“编辑系统环境变量” 也可以右键此电脑->属性->高级系统设置打开相同的界面 点击环境变量 一般添加就是添加在框出的 Path 里面,双击可以看到现有的环境变量并进行编辑 例如我在博客中写把 Java 的 jdk 解压好…...
【计算机视觉】图片文件格式的讲解
文章目录 一、图片的压缩二、计算机表示颜色三、JPG和PNG3.1 JPG3.2 PNG 一、图片的压缩 图片文件格式有可能会对图片的文件大小进行不同程度的压缩,图片的压缩分为有损压缩和无损压缩两种。 有损压缩。指在压缩文件大小的过程中,损失了一部分图片的信…...
2023最全的性能测试种类介绍,这6个种类特别重要!
系统的性能是一个很大的概念,覆盖面非常广泛,包括执行效率、资源占用、系统稳定性、安全性、兼容性、可靠性、可扩展性等,性能测试就是描述测试对象与性能相关的特征并对其进行评价而实施的一类测试。 性能测试是一个统称,它其实包…...
代码随想录算法训练营19期第43天
1049. 最后一块石头的重量 II 视频讲解:动态规划之背包问题,这个背包最多能装多少?LeetCode:1049.最后一块石头的重量II_哔哩哔哩_bilibili 代码随想录 初步思路:动态规划。 总结:套用01背包 dp[j…...
微信小程序wx.previewImage实现图片预览
在微信小程序中,wx.previewImage函数用于预览图片,可以将一组图片以轮播的方式展示给用户,并支持用户手势操作进行切换。 使用wx.previewImage函数需要传入一个参数对象,该对象包含以下属性: current: String&#x…...
Java实现Modbus读写数据
背景 由于当时项目周期赶,引入了一个PLC4X组件,上手快。接下来就是使用这个组件遇到的一些问题: 关闭连接NioEventLoop没有释放导致oom设计思想是一个设备一个连接,而不是一个网关一个连接连接断开后客户端无从感知 前两个问题解…...
C++11新特性⑤ | 仿函数与lambda表达式
目录 1、引言 2、仿函数 3、lambda表达式 3.1、lambda表达式的一般形式 3.2、返回类型说明 3.3、捕获列表的规则 3.4、可以捕获哪些变量 3.5、lambda表达式给编程带来的便利 VC常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...&a…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...


















