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

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

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

相关文章

CH341 USB总线转接芯片

产品概述&#xff1a; CH341是一个USB总线的转接芯片&#xff0c;通过USB总线提供异步串口、打印口、并口以及常用的2线和4线等同步串行接口。 在异步串口方式下&#xff0c;CH341提供串口发送使能、串口接收就绪等交互式的速率控制信号以及常用的MODEM联络信号&#xff0c;用于…

QT中闹钟的设置

.h文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPushButton> //按钮 #include <QTextEdit> //文本 #include <QLabel> //标签 #include <QLineEdit> //行编辑器#include <QTimerEvent> //定时器事件类头文件 #…

【51单片机实验笔记】声学篇(一) 蜂鸣器基本控制

目录 前言硬件介绍PWM基础蜂鸣器简介 原理图分析蜂鸣器驱动电路 软件实现蜂鸣器短鸣蜂鸣器功能封装 总结 前言 蜂鸣器在生活中的应用实则相当广泛。通过本章你将学会制造噪声 &#xff08;笑~&#xff09;你将学会驱动它们&#xff0c;并发出响声。 硬件介绍 PWM基础 占空比…

高德Android高性能高稳定性代码覆盖率技术实践

前言 代码覆盖率(Code coverage)是软件测试中的一种度量方式&#xff0c;用于反映代码被测试的比例和程度。 在软件迭代过程中&#xff0c;除了应该关注测试过程中的代码覆盖率&#xff0c;用户使用过程中的代码覆盖率也是一个非常有价值的指标&#xff0c;同样不可忽视。因为…

java八股文面试[java基础]——字节码的组成

什么是字节码&#xff1f; 因为JVM针对各种操作系统和平台都进行了定制&#xff0c;无论在什么平台&#xff0c;都可以通过javac命令将一个.java文件编译成固定格式的字节码&#xff08;.class文件&#xff09;供JVM使用。之所以被称为字节码&#xff0c;是因为.class文件是由…

用Qt自制一个小闹钟

小闹钟 功能 当按下启动按钮时&#xff0c;停止按钮可用&#xff0c;启动按钮不可用&#xff0c;闹钟无法设置&#xff0c;无法输入自定义内容 当按下停止按钮时&#xff0c;暂停播报&#xff0c;启动按钮可用&#xff0c;闹钟可以设置&#xff0c;可以输入自定义内容 .pro文…

如何在`Pycharm`中配置基于WSL的`Python Interpreters`,以及配置基于WSL的`Terminal`

文章目录 一、创建pycharm用户并授予sudo权限0. 启动WSL下的CentOS1. 创建pycharm用户并授予sudo权限2. 设置pycharm用户为wsl启动Linux的默认用户3. 重启并重新登录wsl下的CentOS4. 验证pycharm用户的sudo权限 二、创建基于WSL的Python Interpreter1. 添加基于WSL的Python Int…

微信小程序商城的定义、特点、优势、未来发展方向

微信小程序商城是一种新兴的电子商务模式&#xff0c;近年来风头火势&#xff0c;深受商家和消费者的喜爱。它是基于微信平台开发的一种小程序&#xff0c;用户可以通过微信进行搜索、购买商品或服务&#xff0c;实现线上购物的便利。本文将从微信小程序商城的定义、特点、优势…

【已解决】oracle获取最近2学年的数据

已解决 &#xff1a;oracle获取最近2学年的数据 SELECT * FROM (SELECT * FROM xx.JWXT_XSKB WHERE AND xn IN (‘2023-2024’,‘2022-2023’)); 问题 某某系统课表数据过大&#xff0c;要求只获取最近2学年的数据&#xff0c;不能写死。 思路 mysql 在子查询的WHERE子句中…

如何用PS把roughness贴图转换成Smoothness,并放入Metallic贴图的a通道。

1&#xff1a;用PS打开Roughness贴图 2&#xff1a;选择反相&#xff0c;装换成Smoothness贴图 3&#xff1a;新建一个大小相等的psd文件&#xff0c;或者打开Metallic贴图 4&#xff1a;如果没有金属度贴图&#xff0c;就把新建的图画成纯黑色 5&#xff1a;选择图层蒙版->…

PE文件格式详解

摘要 本文描述了Windows系统的PE文件格式。 PE文件格式简介 PE&#xff08;Portable Executable&#xff09;文件格式是一种Windows操作系统下的可执行文件格式。PE文件格式是由Microsoft基于COFF&#xff08;Common Object File Format&#xff09;格式所定义的&#xff0c…

android 实现本地一键打包,告别繁琐的studio操作

前言 在实际开发项目中&#xff0c;我们的工程目录往往是多个app在一个工程下的&#xff0c;每次打包都需要手动的用studio点击Build->Generate Signed Bundle or APK->APK 选择app&#xff0c;签名等&#xff0c;甚至有的app签名还不一样&#xff0c;还需要手动的来回切…

NC后端扩展开发

前言 在日常的工作中&#xff0c;会遇到各种各样的需要进行扩展开发的需求&#xff0c;可以使用系统预留的扩展开发机制来实现&#xff0c;避免修改源码。因NC产品已迭代至BIP版本&#xff0c;所以前端扩展方式就再进行不赘述了&#xff0c;本文主要介绍后端扩展开发方式&…

【FreeRTOS】【应用篇】消息队列【下篇】

前言 本篇文章主要对 FreeRTOS 中消息队列的概念和相关函数进行了详解消息队列【下篇】详细剖析了消息队列中发送、接收时队列消息控制块中各种指针的行为&#xff0c;以及几个发送消息和接收消息的函数的运作流程笔者有关于 【FreeRTOS】【应用篇】消息队列【上篇】——队列基…

redis 数据结构(二)

整数集合 整数集合是 Set 对象的底层实现之一。当一个 Set 对象只包含整数值元素&#xff0c;并且元素数量不时&#xff0c;就会使用整数集这个数据结构作为底层实现。 整数集合结构设计 整数集合本质上是一块连续内存空间&#xff0c;它的结构定义如下&#xff1a; typed…

nginx使用详解

文章目录 一、前言二、nginx使用详解2.1、nginx特点2.2 静态文件处理2.3 反向代理2.4 负载均衡2.5 高级用法2.5.1 正则表达式匹配2.5.2 重定向 三、总结 一、前言 本文将详细介绍nginx的各个功能使用&#xff0c;主要包括 二、nginx使用详解 2.1、nginx特点 高性能&#xff…

Unity中Shader的面剔除Cull

文章目录 前言一、Unity中Shader的面是否剔除&#xff0c;是由我们自己决定的二、暴露一个属性来控制 剔除模式三、如何区分正反面 前言 Unity中Shader的面剔除 Cull Off | Back | Front 一、Unity中Shader的面是否剔除&#xff0c;是由我们自己决定的 使用 Cull Off | Back |…

Pygame中Trivia游戏解析6-3

3.3 Trivia类的show_question()函数 Trivia类的show_question()函数的作用是显示题目。主要包括显示题目框架、显示题目内容和显示题目选项等三部分。 3.3.1 显示题目的框架 在show_question()函数中&#xff0c;通过以下代码显示题目的框架。 print_text(font1, 210, 5, &q…

【AI】数学基础——数理统计(概念参数估计)

概率论 文章目录 3.6 数理统计概念与定理3.6.1 概率论与数理统计区别3.6.2 基本定理大数定理马尔科夫不等式切比雪夫不等式中心极限定理 3.6.3 统计推断的基本问题 3.7 参数估计3.7.1 频率派点估计法矩阵估计法极大似然估计点估计量的评估 区间估计 3.7.2 贝叶斯派贝叶斯定理条…

Spring Boot 整合 Shiro(后端)

1 Shiro 什么是 Shiro 官网&#xff1a; http://shiro.apache.org/ 是一款主流的 Java 安全框架&#xff0c;不依赖任何容器&#xff0c;可以运行在 Java SE 和 Java EE 项目中&#xff0c;它的主要作用是对访问系统的用户进行身份认证、 授权、会话管理、加密等操作。 …