C基础 详细教学 一小篇

这篇博客详细介绍了C语言的基础知识,包括hello world程序、gcc编译器、编译方式、计算机中数据的处理(涉及各种进制转换)以及词法符号,适合C语言初学者入门学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

欢迎小白,大神来参观。。


如果对你有所帮助,可以点个赞,关注一下,后续将持续更新

-----------------目录---------------------

1. hello world 程序说明

2.gcc编译器讲解              

3.编译方式....

4.计算机中数据的处理

5.词法符号

    下面进入正题:

一、hello world程序说明

#include <stdio.h>
//#开头的行 称为预处理行 
//include  是包含头文件的关键字
//<>    里面是头文件的名字
// stdio.h  是标准输入输出的头文件  我们使用 printf就在这个头文件里
//   ()圆括号  []方括号  {}花括号  <>尖括号
// int 是函数的返回值类型 ----先不用管
//  main 主函数  是程序的入口 每个程序必须有 且只能有1个
//  () 里面是main函数的参数----先不用管 
//    main函数的()里面可以空着不写,但是()必须写
//   {}里面是函数体 也就是我们要执行的代码
int main(int argc, const char *argv[]){
    //printf是系统给我们提供的输出的函数
    //功能是将后面 "" 里面的内容打印到终端
    //  \n  是换行符  也就是回车的意思
    printf("hello world\n");  //C语言的每条指令结尾要有 分号 ;
    
    //函数的返回值  ---先不用管
    return 0;
}

// 单行注释

/*
    多行
    注释
*/

#if 0
    多行
    注释
#endif

 二、gcc编译器

编程语言分为   编译型语言 和 解释型语言。

编译型语言:

        在执行之前必须要专门有一个编译的过程,编译就是将我们人类能识别的高级语言翻译为机器可以识别的低级语言的过程。编译器就是专门做这个工作的软件。

优点:由于已经提前专门翻译过了,在执行的过程中无需重新翻译,执行的效率相比较高

缺点:依赖于编译器,跨平台性相对性较差

解释型语言:

执行之前无需单独编译,而是在执行的过程中,由解释器逐行的翻译给计算机看的。

也叫脚本语言。

优点:跨平台性相对较好

缺点:每次执行都需要重新翻译,执行效率相对较低

例如:shell  python

linux系统中 C语言的编译器是 gcc 编译器

三、编译方式

3.1 简单明了

gcc xxx.c        xxx.c是你自己的.c文件名

                        这种编译方式默认会在当前的路径下生成一个名叫a.out的可执行文件

                        使用./a.out 就可以执行了

3.2 自定义可执行文件名

gcc xxx.c -o diy_name         xxx.c是你自己的.c文件名     diy_name是你定义的可执行文件名

                                                这种编译方式可以生成自定义名字的可执行文件

                                                ./自定义的名字 就可以执行了

3.3 按照编译流程分步编译

预处理-->编译-->汇编-->链接

        预处理:展开头文件 替换宏定义 删除注释

                gcc -E xxx.c -o xxx.i

        编译:词法分析、语法分析 说白了就是查错的

                如果无误 会生成对应的汇编文件

                gcc -S xxx.i -o xxx.s

        汇编:将汇编文件生成对应的二进制文件(目标文件)

                gcc -c xxx.s -o xxx.o

        链接:多个目标文件链接 链接库文件 生成对应的可执行文件  

                gcc xxx.o -o a.out

四、计算机中数据的处理

计算机能处理的数据分为两大类:数值型数据 非数值型数据

4.1 数值型数据的表示方式

4.1.1 十进制

        方便人类识别和处理的

        特点:逢10进1 每一位上的数字范围 [0-9]

        前导符:没有前导符

        例如:100 1234

4.1.2 二进制

        方便计算机识别和处理的

        特点:逢2进1 每一位上的数字只能是 0 或者 1

        前导符:0b

        例如:0b1010001 0b1011

二进制转十进制:

        0b11101-->从右向左1*2^0+0*2^1+1*2^2 + 1*2^3 + 1*2^4

                                        == 1 + 0 + 4 + 8 + 16

                                        == 29

                        其他任何进制转10进制都可以使用这种方式,

                        只不过将底数的2 换成对应进制的数字即可

如果熟练 可以使用 8421转换 ,8421指的是每一位上1的权重

                                0001 -->1

                                0010 -->2

                                0100 -->4

                                1000 -->8

十进制转二进制:

使用辗转相除法(除2取余法)

        使用十进制的数据除以2,保留商和余数,然后用商继续除以2,

        在保留商和余数,以此类推,直到商为0时结束。

        将得到的余数反向取出,就是对应的二进制数了。

4.1.3 八进制 

特点:逢8进1 每一位上的数字范围 [0, 7]

前导符:0

例如:0345 0556

八进制转二进制:

                方式1:八转十 然后 十转二

                方式2:1位八进制对应3位二进制

                0357 ---> 0b011101111

二进制转八进制:

                从右向左 每3位二进制对应1位八进制,高位不够 补0

                0b011010101 ---> 0325

 4.1.4 十六进制

        

特点:逢16进1 每一位上的数字范围 [0, 9] a:10 b:11 c:12 d:13 e:14 f:15

前导符:0x

例如:0xAB12 0x78EF

十六进制转二进制:

                方式1:十六转十 然后 十转二

                方式2:1位十六进制对应4位二进制

                0x78EF ---> 0b0111100011101111

二进制转十六进制:

                从右向左 每4位二进制对应1位十六进制,高位不够 补0

                0b0001110101010011 ---> 0x1D53

注意:不管几进制的数据,在计算机中都会转换成二进制处理。

例:

#include<stdio.h>

int main(){
    // int 是数据类型 是用来定义变量的
	// a   是变量名 是自己起的名字
	int a = 100;  //用十进制的100 给变量a赋值
	printf("a = %d\n", a);  //%d是十进制的占位符 表示将后面的数据按十进制输出
	printf("a = %#o\n", a);  //%o是八进制的占位符  # 表示输出前导符
	printf("a = %#x\n", a);  //%x是十六进制的占位符  # 表示输出前导符
	//printf 函数没有输出 二进制的能力
	
	int b = 0b1010110; //用二进制的数据给变量赋值
	printf("b = %d  b = %#o  b = %#x\n", b, b, b);

	int c = 0567; //用八进制的数据给变量赋值
	printf("c = %d  c = %#o  c = %#x\n", c, c, c);

	int d = 0xAB12; //用十六进制的数据给变量赋值
	printf("d = %d  d = %#o  d = %#x\n", d, d, d);

	return 0;
}

执行结果:

4.2 非数值型数据的表示形式

计算机中只能处理二进制的数值型数据,但是实际编程的过程中,

也经常会遇到跟多非数值型数据,如人名、企业名、网址 等

"www.baidu.com" "zhangsan" "4399" 'M'

(非数值型数据都是用 单引号或者双引号引起来的)

计算机也需要处理这些非数值型数据,科学家们就发明了一种叫做 ascii 码的东西

使用 man ascii 就可以查看ascii码表 按 q 退出

ascii其实就是规定了 字符 和 整数对应的关系

每个字符都有一个对应的整数,叫做该字符的ascii码

实际使用字符的时候,本质上使用的都是该字符对应的ascii码

常见字符对应的ascii码

                'A' ~ 'Z' : 65~90

                'a' ~ 'z' : 97~122

                '0' ~ '9' : 48~57

                '\0' : 0

                '\n' : 10

转义字符:

        所有字符都可以使用 '\+数字(八进制)' 来表示

        除此之外,C语言中还定义一些 '\+字母' 来表示那些无法显示的字符

        如 '\n' '\0' '\a' ..

        这些就叫做转义字符,因为这些符号已经不是字母本身的含义了。

五、词法符号

5.1 关键字

所谓的关键字就是编译器中已经规定好的一些有特殊含义的单词,直接使用即可。

C语言是严格区分大小写的,关键字都是小写的。

比如下面这些:

char short int long float double signed unsigned struct union enum void
const static extern register volatile auto
typedef
sizeof
if else switch case break default do while goto for continue return 

 5.2 标识符

所谓的标识符就是我们自己起的名字,变量名、函数名、结构体名、共用体名。。

命名时要符合标识符的命名规范:

        1.只能由数字、字母、下划线组成

        2.不能以数字开头

        3.不能和关键字冲突

尽量做到"望文知意"。

如果你是Linux系统c基础的小白,可以点个关注,c基础完毕还有更进阶的教程

欢迎订阅收藏@

支持 MS SQL 2005 之前的版本 不支持 sql 2008 介绍 Log Explorer主要用于对MSSQLServer的事物分析和数据恢复。你可以浏览日志、导出数据、恢复被修改或者删除的数据(包括执行过update,delete,drop和truncate语句的表格)。一旦由于系统故障或者人为因素导致数据丢失,它能够提供在线快速的数据恢复,最大程度上保证恢复期间的其他事物不间断执行。 他可以支持SQLServer7.0、SQLServer2000和SQLServer2005,提取标准数据库的日志文件或者备份文件中的信息。 其中提供两个强大的工具:日志分析浏览,对象恢复。具体功能如下: l 日志文件浏览 l 数据库变更审查 l 计划和授权变更审查 l 将日志记录导出到文件或者数据库表 l 实时监控数据库事物 l 计算并统计负荷 l 通过有选择性的取消或者重做事物来恢复数据 l 恢复被截断或者删除表中的数据 l 运行SQL脚本 产品 LogExplore包含两部分 l 客户端软件 l 服务器代理 服务器端代理是保存在SQLServer主机中的一个只读存储过程,他的作用是接受客户端请求,读取在线事物日志块并通过网络传给客户端软件,由客户端软件来读取这些原始的数据块来完成Log Explore所提供的所有功能。 他依赖来的网络协议包括: l Named Pipe:局域网中适用 l Tcp/Ip:广域网中适用 数据库相关介绍 事物日志(Transaction Log) SQLServer的每个数据库都包含事物日志,它以文件的形式存储,可以记录数据库的任何变化。发生故障时SQLServer就是通过它来保证数据的完整性。 操作(Operation) 操作是数据库中定义的"原子行为",每个操作都在日志文件中保存为一条记录。它可以是用户直接输入的SQL语句,比如标准的insert命令,日志文件中便会记录一条操作代码来标志这个insert操作。 事物(Transaction) 事物是一系列操作组成的序列。他可以理解为直观的不可分割的一笔业务,可以执行成功或者失败。典型的事物比如由应用程序发出的具有开启-提交功能的一组SQL语句。不同的事物靠事物Id号(transaction ID)来区分,具有相同ID的事物记录的日志也相同。 在线事物日志(Online Transaction Log) 在线事物日志是指当前活动数据库所用的日志。可以通过如下命令来确定其对应文件 Select * from SYSFILES 他的文件后缀名一般是.LDF 离线事物日志(Offline Transaction Log) 离线事物日志是指非活动数据库所用的日志。当其数据库处于关闭(ShutDown)才状态下可以进行复制备份操作。他的结果同在线事物日志完全相同。 备份文件 备份文件是保存食物日志备份的文件,通常管理员通过运行SQL语句或者企业管理器来生成该文件。备份文件的内部结构和事物日志不同,他采用称为MTF的格式来保存数据。一个备份文件可以包含一个日志的多组备份,甚至包括多个数据库的混合备份. 设置为自动收缩 企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" 强烈要求该项不要选中.否则SQLServer将已循环的方式来覆盖先前的日志记录,将会导致LogExplore无法恢复错误. 数据恢复介绍 LogExplore允许你恢复应为误操作或者程序错误而导致的数据丢失或者更改.比如执行update\Delete语句时丢失了where子句,或者错误使用了Dts功能. LogExplore不支持直接修改数据库.他可以生成事物的逆操作脚本. 如果log是delete table where ...的话,生成的文件代码就是insert table .... 你可以通过SQL查询分析器,或者LogExplore的Run SQL Script功能来执行生成脚本. 关于Undo Undo功能可以逆操作一组指定的用户事物。包括insertdelete和update,其局限性如下: l 事物类别:LogExplore只能undo用户事物。用户事物是指在用户表上定义的事物,不支持系统表的更新恢复。同时,他也不支持计划变更的回滚。 l Blob类型:包括text,ntext,image类型。LogExplore只支持这些类型的insertdelete恢复,不支持update语句恢复。 关于redo Redo功能可以再次运行一组指定事物。它可以在以下情况中用到: 丢失数据库而且没有任何备份文件。 l 如果原始日志文件没有丢失可以通过Redo来实现恢复。 l
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值