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

news2025/1/21 12:17:51

标识符

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

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  *STRING
        STRING   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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于UWB的非暴露空间位置服务探究

技术背景 城市轨道交通对空间位置服务有特定的痛点和需求&#xff0c;尤其是针对地下封闭非暴露空间开展的位置服务&#xff0c;如风险防控、应急指挥、维护维修、运行组织等&#xff1b;同时&#xff0c;空间位置服务是实现智慧城轨的关键技术之一&#xff0c;在智慧城轨交通…

成为前端开发负责人之前,你需要具备这10个能力

开篇 作为一名开发者&#xff0c;成为团队领导可能是一个令人兴奋但也令人畏惧的转变。有许多新的责任和挑战需要应对&#xff0c;很难确切知道会发生什么。你很可能习惯了将90-95%的时间花在成为一名专家开发者上。而成为团队领导意味着你的责任超越了在开发方面的专业知识。 …

“新KG”视点 | 陈华钧——大模型时代的知识处理:新机遇与新挑战

OpenKG 大模型专辑 导读 知识图谱和大型语言模型都是用来表示和处理知识的手段。大模型补足了理解语言的能力&#xff0c;知识图谱则丰富了表示知识的方式&#xff0c;两者的深度结合必将为人工智能提供更为全面、可靠、可控的知识处理方法。在这一背景下&#xff0c;OpenKG组织…

数据进制的转换

其他进制转换为十进制 通过按权展开法转换 十进制转换为其他进制 通过短除法转换&#xff08;注意计算结果是倒着的&#xff09; 例如将十进制的94转换为二进制 二进制转八进制和十六进制 3位二进制数表示1位八进制数&#xff0c;4位二进制数表示1位十六进制数 同理八进制数…

基础算法-递推算法-学习

现象&#xff1a; 基础算法-递推算法-学习 方法&#xff1a; 这就是一种递推的算法思想。递推思想的核心就是从已知条件出发&#xff0c;逐步推算出问题的解 最常见案例&#xff1a; 一&#xff1a;正向递推案例&#xff1a; 弹力球回弹问题&#xff1a; * 弹力球从100米高…

VB.NET 如何将某个Excel的工作表中复制到另一个的Excel中的工作表中https://bbs.csdn.net/topics/392861034

参考http://share.freesion.com/306372/可以实现直接拷贝指定表 Private Sub Excel复制工作簿()Dim myExcelApp As New Microsoft.Office.Interop.Excel.ApplicationmyExcelApp.Workbooks.Open(System.Environment.CurrentDirectory "\\测试用例.xlsx", Type.Missin…

Python教程(12)——Python数据结构集合set介绍

集合 创建集合访问集合删除集合修改集合元素添加集合元素删除集合元素 集合运算&#xff1a;并集&#xff08;Union&#xff09;交集&#xff08;Intersection&#xff09;差集&#xff08;Difference&#xff09;对称差集&#xff08;Symmetric Difference&#xff09; 集合的…

数学建模:Logistic回归预测

&#x1f506; 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 数学建模&#xff1a;Logistic回归预测 Logistic回归预测 logistic方程的定义&#xff1a; x t 1 c a e b t x_{t}\frac{1}{cae^{bt}}\quad xt​caebt1​ d x d t − a b e b t ( c a e b t ) 2 >…

slog正式版来了:Go日志记录新选择!

在大约一年前&#xff0c;我就写下了《slog&#xff1a;Go官方版结构化日志包[1]》一文&#xff0c;文中介绍了Go团队正在设计并计划在下一个Go版本中落地的Go官方结构化日志包&#xff1a;slog[2]。但slog并未如预期在Go 1.20版本[3]中落地&#xff0c;而是在golang.org/x/exp…

深入浅出理解Allan方差分析方法

一、参考资料 深入浅出理解卡尔曼滤波 二、Allan方差分析方法 1. 引言 传统的误差指标往往是采用均值误差&#xff08;反映整个误差序列有无宏观偏置&#xff09;、标准差&#xff08;反映整个误差序列的波动情况&#xff09;&#xff0c;以及均方根&#xff08;RMS&#x…

基于科大讯飞AIGC创作平台,构建数字人虚拟主播

笔者为体验目前数字人虚拟主播创作视频的质量&#xff0c;特意制作了一段测试视频。 基于讯飞智作创建 总体感受&#xff0c;数字人虚拟主播具有成本低、可定制性强等优点&#xff0c;但是也存在缺乏人情味、技术限制和法律问题等缺点。因此&#xff0c;在使用数字人虚拟主播时…

安装Ubuntu系统,将U盘当作启动盘后写保护怎么回复?

下载ChipGenius 插入写保护的U盘&#xff0c;打开ChipGenius.exe后可以扫描到U盘&#xff0c;如下图中的E:盘就是我插入的U盘&#xff08;我的PC上只有C、D两个分区&#xff09;&#xff1b; ChipGenius的作用 下载ChipGenius是为了获取U盘的设备信息&#xff1a;重点是主控…

思维的深度,决定职场的高度

经常有读者问我&#xff0c;自己做事很努力&#xff0c;可是结果却总是不尽如人意&#xff0c;问题究竟出在哪里&#xff1f; 虽然成事的关键因素有很多&#xff0c;但是归根结底其实只有两点&#xff0c;就是做局和破局。也就是&#xff0c;如何识破别人给你做的局&#xff1f…

与AI一起学习Anything:30%的人用ChatGPT编程

学习和工作在LLM时代&#xff0c;就是同一件事&#xff0c;在编程这个场景&#xff0c;我们看到了学习和工作高度重叠的可能。 近期&#xff0c;随着ChatGPT热度下降&#xff0c;一些比较稳定的使用场景开始浮出水面&#xff0c;例如编程&#xff0c;据调查数据显示&#xff0c…

yolov5模型转换

yolov5本身release目录有提供了onnx转换好的模型&#xff0c;想着也自己操作一遍&#xff0c;可是实际操作却遇到了问题&#xff0c;这里做下记录方便后续可能用到 安装onnx&#xff0c;转的时候提示出错ONNX: export failure 0.1s: Unsupported ONNX opset version: 17 修改…

【复盘】记录一次数据库连接超时问题

问题 在下午4点左右&#xff0c;发现系统响应不正常。没有将结果返回给上游系统。 问题排查 1.先查看了机器的CPU、内存是否正常。发现没有问题。 2.接着看系统Error日志&#xff0c;发现大量的数据库连接不成功。进而分析是不是可能和请求量增加有关系。发现果然是。将近…

【React】React学习:从初级到高级(三)

3 状态管理 随着应用不断变大&#xff0c;应该更有意识的去关注应用状态如何组织&#xff0c;以及数据如何在组件之间流动。冗余或重复的状态往往是缺陷的根源。 3.1 用State响应输入 3.1.1 声明式地考虑UI 总体步骤如下&#xff1a; 定位组件中不同的视图状态 确定是什么…

C语言---关键词

C语言关键词如下&#xff1a;

centos7快速修改密码

centos7快速修改密码 小白教程&#xff0c;一看就会&#xff0c;一做就成。 1.命令 #第一种&#xff0c;我经常用这个&#xff0c;这个不行了&#xff0c;会用到第二个echo 用户名:密码 | sudo chpasswd #例如下面 echo root:yegoo123 | chpasswd#第二种echo 密码|passwd --st…

Redis之主从复制解读

目录 基本概述 作用 如何配置主从复制 命令配置&#xff08;Slaveof &#xff09; 配置文件配置 主从复制缺点 主从复制原理 主从复制常见问题解答 命令补充&#xff08;info replication&#xff09; 基本概述 主从复制,是指将一台Redis服务器的数据,复制到其他的R…