【C语言】基本常识及知识点
前言
# 标识符,告诉编译器 # 后边的进行替换
include,包含头文件的路径
< > 表示头文件直接去 C 库查找, "" 表示先在当前路径下找头文件,如果没有再去 C 库找
stdio.h 是标准输入输出的头文件,C语言中头文件不一定必须是 .h 后缀,但是书写传统 都是以 .h 为后缀作为头文件
此文件中声明了标准 C 库的标准输入输出函数 如 :printf scanf gets puts 这些函数的逻辑被编译成标准 C 库的二进制文件
int 是main函数的返回值,类型也可以是 void 类型
main 主函数名字也标记了 C 程序的入口,程序从这个地方开始执行
(形参列表) ()内也可以不写形参 建议不传参时加上 void 标识一下
{
return 0;
}
{}作用域标记符
花括号中 return 表示返回也是 C 语言中的一种跳转语句,也是出栈的一个标识
; 表示告诉编译器 ; 标识的这句话参与编译
C语言中,有且仅有一个 main 函数
C语言本质就是操作内存
在编写 C 语言程序是一定要区分中文字符与英文字符,所有的标记符都是英文的
关于头文件:
C语言中 一般头文件 以 .h 作为后缀
.h 文件中一般都是函数及变量的声明 没有变量赋值操作
①//注释
②/* 注释 */
一、内存概念
位称为 bit ,一个二进制位只能表示要么0要么1
字节为byte ,一个字节 由 8个bit位构成
KB = 1024个 字节
MB = 1024个 KB
GB = 1024个 MB
TB = 1024个 GB
计算机内存是以每一个字节进行编号 从 0 开始,用十六进制数表示 ,这个编号简称 内存地址
二、计算机内存申请方法
1. 定义变量
存储类型 + 数据类型 + 变量
例:auto int a
存储类型: 主要是在哪里申请空间
auto :系统自动分配,如果不标记默认是由系统分配
static :静态区,空间利用周期随程序结束而结束,标定文件使用
const :只读区,只可以读取空间内的数据 不可以修改
extern :外部的(主要针对文件来说)
register :寄存器,在 CPU 内部申请空间
(因为 CPU 内部寄存器个数有限,所以不一定能够申请到 如果申请不到的话,则默认转为 auto ,CPU 内部寄存器与 CPU 数据交互速度快,且 register 申请的空间不可以进行取地址操作,没有地址编号,所以一般开发不常用)
数据类型: 主要表示申请多大的空间以字节为单位
基本类型
字符型:表示日常用的符号 char 占1个字节,能够表示十进制 256 个数据
短整型:表示日常的整数表示 short 占 2个字节,能够表示十进制 65536 个数据
整型:表示工程开发中一般用 int 表示整形数据 int 占 4个字节,能够表示十进制 42 亿多个数据
长整型:
long int :32位操作系统占 4个字节,64位操作系统占 8个字节
实型(浮点)
单精度: float 占 4个字节
双精度: double 占 8个字节
多精度: long double 占 32 位系统 12 字节 ,64位系统 16 字节
枚举类型:
enum
构造类型:
数组 char c[10]
结构体 struct
共用体 union
指针类型:
数据类型 *
char *
int *
void *
空类型:
void
变量名: 相当于是给申请到的空间取一个名字
2.手动申请 malloc分配 空间开辟在堆区
三、输入输出
1. printf(“%d”,a)
2. scanf(“%d”,&a)
3. 占位符:
%d : 打印十进制整型数据
%o : 打印八进制
%x : 打印十六进制
%c : 打印字符
%s : 打印字符串
%u : 打印无符号十进制整型
%ld :打印长整型
%f : 打印单精度浮点型,默认打印小数点后6位。%.nf ,n 是保留小数点后的位数
%Lf: 打印双精度浮点型
%p: 打印申请到的空间地址数据
%e: 指数数形式打印
%#x :打印十六进制数会有 0x
%#o :打印八进制数会有 0
有一些占位符scanf不能使用,printf通用
四、运算符
优先级从上到下排列
单目运算符:
+ 正数
- 负
+ + 自增
- - 自减
* 指针相关
& 指针相关
!真假取反
~ 按位取法
算数运算符:
+ 加
- 减
* 乘
/ 除
% 取余(也叫取模)(浮点数不能进行取余运算)
位移运算:
<< 左移
>> 右移
关系运算:
> 大于
< 小于
== 等于
!= 不等于
>= 大于等于
<= 小于等于
位运算:
& 按位与
^ 位异或
| 位或
逻辑运算:
&& 逻辑与
|| 逻辑或
条件运算符:
?:
a = a>b?a:b 如果?前的表达式为真,就执行 : 左侧的表达式;否则执行 :右侧表达式
赋值运算符:
==
+=
-=
*=
/=
&=
|=
>>=
<<=
逗号运算符:
,
运算符优先级次序可以用()来限制优先级次序
五、控制语句
控制语句是实现程序逻辑的 ,控制着代码的执行与否及执行多少次
1. 条件判断 if 语句
单分支if(表达式) //如果表达式为真,则执行语句;为假则不执行。C语言中真假判断 0 为假,非 0 为真{执行语句;}
双分支if(表达式){执行语句1;}else{执行语句2;}
多分支if(表达式 1){ 执行语句1;}else if(表达式 2){ 执行语句 2;}else{ 执行语句 3;}
2. 开关switch语句
switch(表达式) //此处表达式一般是整型变量 { case 表达式 1:执行语句 1; //case 后边的表达式 一般是常量表达式break;case 表达式 2:执行语句 2;break;case 表达式 3:执行语句 3;break;case 表达式 n:执行语句 n;break;case 表达式 n+1:执行语句 n+1;break;default:执行语句;}
3.循环语句 for / while / do while
for(<表达式1>;<表达式2>;<表达式3>){循环语句;}
while(<表达式>)//若干表达式一般为关系运算为真,则执行循环语句 为假 则不执行{循环语句;}
do {代码块;}while(表达式1);
4. 跳转语句
continue : 结束此次循环,执行下一次循环 continue 后的语句不再执行
break :跳出整个循环
goto :一般少用 goto 容易出现 bug 能避免则避免
return :结束程序,跳出整个程序
六、数组
数组是相同数据类型的有序集合
数组的表现形式:
存储类型 + 数据类型 + 数组名 + [常量表达式]
例:auto char a [50]
数组赋值:
数组数据访问 从 0 开始 a[0] a[1] a[2] ... a[49] 共50个
其中 [] 内的数字 表示数组的 下标,所以说 数组下标是从 0 开始的
数组赋值也是根据下标进行复制的
比如
a[0] = 98;
a[1] = 78;
a[2] = 55;
a[40] = 88;
数据内存分配:
- 数组分配的内存是连续的
数组初始化:
未初始化的数组
int a[5];
完全初始化
int a[5] = {1,2,3,4,5};//一定要加分号
不完全初始化
int a[5] = {1,2,3};
完全初始化为 0
int a[5] = {0};
数组访问不可以越界:
比如 int a[5] = {1,2,3,4,5};
a[5] = 500;//如此操作可以么???
不可以 ,虽然编译通过且可以运行,但因为访问越界 会改变或读取错误数据.
[]:在C语言数组中叫做下标运算符,定义a[n],[]不可超过n,也不可小于0
数组名是数组的首地址,它是一个地址“常量”
七、指针
指针是地址数据
指针变量就是开辟一段空间,空间内只能存储 地址数据
指针变量定义:
存储类型 + 数据类型 * + 变量名
例:auto int * a,数据类型可以是任意类型
//定义一个整型指针变量
auto int *p; //在 32 位操作系统下,任何数据类型的指针变量都占 4 字节, 64 位操作系统占 8 字节
//定义一个字符类型的指针变量
char *s; // 32 位操作系统 也占 4 字节
指针变量赋值:
p = &a;//& 在指针环节表示变量取地址的意思,这一句就是将 a 空间的首地址数据 ,存入 p 空间内 也叫作 p 指向 a
指针的定义:
指针使用前 一定要初始化 未初始化的指针称为 野指针,直接使用野指针是
非常非常非常危险的事情!!!
int *p;
int a;
*p = 300;
//不允许如此操作,p 是未初始化的指针变量,内部存储的数据不确定
//如果直接操作随机地址是很危险的。所以操作系统内存保护机制会直接停止程序
//未初始化的指针 叫做野指针 是不可以直接使用的
指针与数组:
数组名是数组的首地址, 如何用指针指向数组呢???
int a[5] = {1,2,3,4,5};
int *p;
p = a;
//p++,相当于指针变量 p 自增 ,指针变量,每一次自增所增加的字节宽度 是它自身数据类型所占的字节宽度
//又因为数组的内存是连续分配的,所以连续打印&p即可连续展现出整个数组
常量指针和指针常量:
"常量"指针:
指针的指向可以改变 但指针指向的空间内的数据不可被改变
const int *p;
指针“常量”
指针指向不可被改变 但指针指向的空间内的数据可以被改变
int *const p;
二级指针
int a = 100;//普通变量存储 普通数据
int *p = &a;//一级指针 存储普通变量地址
int **q = &p;//二级指针 存储一级指针变量地址
八、函数
数组是对 相同数据类型的封装
函数是对 代码的封装
函数是实现特定功能的一段代码
函数三要素:
- 功能(函数是用来干什么的)尽量做到见名知意
- 参数(形参列表的参数个数、数据类型、顺序、及意义)建议设计参数个数不要超过 4 个
- 返回值(函数执行结束后返回的数据 数据类型及意义) ,可以没有(void)
函数的声明:
返回值类型 + 函数名 + (形参列表)
int add (int a, int b)
{
return a+b ;
}
返回值为 整型 ,函数名 add , 参数两个 ,数据类型 int a 、b
功能: 计算两个数的和
参数: a 要参与运算的变量 (int 类型),b 要参与运算的标量(int 类型)
返回值:返回a 和 b 相加的int型结果
函数内存:
函数只有在被调用时才会分配内存,用完即释放掉内存
九、结构体
结构体是用户自定义数据类型
数组是对相同数据类型的封装,那么结构体就是对不相同数据类型的封装
- 结构体是数据类型,本身不占内存,只有在成员被定义的时候才会分配内存
struct Student
{ int number,age;//int型学号和年龄char name[20],sex;//char类型姓名和性别float score;
};//此时并没有分配内存
struct Book{ char title[20];//一个字符串表char author[20];//一个字符串表示的author作者float value;//价格表示 };//这里只是声明 结构体的定义
struct Book book1,book2;//结构体变量的定义 分配空间book1.value;//引用结构体变量
定义结构体变量以后,系统就会为其分配内存单元
- 结构体变量的初始化时不能跳过赋值,只能按照顺序一个一个赋值,如果前面的赋值了,后面的没有。则默认为NULL(‘0’)
struct Student
{ char name[20];char sex;int number;
};
struct Student stu1={"Q大帅",'M',12345};
- 使用结构体变量
a = stu1.name;
b = stu1.sex;
c = stu1.number;
能力有限,欢迎大家评论补充!
【C语言】基本常识及知识点相关推荐
- c语言基础回顾 —— 其他知识点
参考:c语言基础回顾 -- 其他知识点 作者:丶PURSUING 发布时间: 2021-03-11 14:48:59 网址:https://blog.csdn.net/weixin_44742824/ ...
- c语言各个英文的作用,C语言最重要的知识点复习资料(国外英文资料).doc
C语言最重要的知识点复习资料(国外英文资料) C语言最重要的知识点复习资料(国外英文资料) The log Share the next list of return logs in the hidd ...
- 计算机二级考试c语言公共知识,2016年电大最新计算机二级考试c语言公共基础题知识点.doc...
2016年电大最新计算机二级考试c语言公共基础题知识点 计算机二级考试c语言公共基础题知识点第一章 数据结构与算法 1.1 算法 算法:是指解题方案的准确而完整的描述. 算法不等于程序,也不等计算机方 ...
- c语言0x1234占两个字节,C语言考试必考知识点
<C语言考试必考知识点>由会员分享,可在线阅读,更多相关<C语言考试必考知识点(11页珍藏版)>请在人人文库网上搜索. 1.C 语言考试知识点第一章 C 语言基本知识[考点1] ...
- C语言入门part1—大致知识点梳理(上篇)
C语言入门part1-大致知识点梳理(上篇) **关键字:**变量常量,全局变量局部变量,字符串+转义字符+注释,sizeof,求数据类型范围(举例char类型),原码反码补码,scanf等等杂七杂八 ...
- C语言入门part2—大致知识点梳理(中篇)
C语言入门part2-大致知识点梳理(中篇) 关键字: 选择语句,循环语句,函数,数组,操作符,if(a >= 15 && a <= 20)和 if( 15 <= a ...
- C语言最重要的知识点【入门干货】
C语言最重要的知识点 总体上必须清楚的: 1)程序结构是三种: 顺序结构 .选择结构(分支结构).循环结构. 2)读程序都要从main()入口, 然后从最上面顺序往下读(碰到循环做循环,碰到选择做选 ...
- C语言的这个小知识点,竟然连开发多年的老司机都了解的不完全
printf()和scanf()是 C语言中最"多才多艺"的 I.O函数 它使用的转换说明和转义字符 能使程序员恰到好处的控制 想要输入和输出的信息 但这也提高了使用它的难度 今天 ...
- c语言二维数组作用,C语言二维数组知识点介绍
C语言二维数组知识点介绍 数组可以看作是一行连续的数据,只有一个下标,称为一维数组.在实际问题中有很多量是二维的或多维的,因此C语言允许构造多维数组.多维数组元素有多个下标,以确定它在数组中的位置.本 ...
最新文章
- RADStudio连接MySQL_使用FireDac(Delphi)在Firebird中创建数据库
- git从master转到开发分支
- 使用object detection训练并识别自己的模型
- redius和oracle怎么配置,求个 交换机radius 详细配置案例
- H.264/AVC 标准中CAVLC 和CABAC 熵编码算法研究
- 计算机机房安全风险防控规范,中心机房安全风险分析一览表
- 来电科技:基于 Flink + Hologres 的实时数仓演进之路
- jQuery 表格响应式插件 FooTable
- Linux学习一周初体验
- 显著性检测(saliency detection)评价指标之KL散度距离Matlab代码实现
- 这类程序员成为百度、阿里宠儿,分分钟秒杀众应届毕业生
- python随机读取字符_Python random模块(获取随机数)常用方法和使用例子
- 团队博客 第三周 设计类图
- 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_3 Mybatis的CRUD-修改和删除操作
- php微博程序,五款国内微博程序:Xweibo、Iweibo、Easytalk、PageCookery、记事狗
- 微软win2008停止服务器,微软停止技术支持Windows Server 2008/2008 R2
- 利用C语言实现99乘法表两种方式
- 中国60家最强汽车初创在此!芯片厂高调入局,智能网联强势霸榜
- IIC总线设计③——光敏传感器(BH1750)
- 基于Quick-cocos2d-x 2.2.3 的动态更新实现