C语言初阶

一.准备工作:

1.创建新项目(标志:解决方案资源管理器出现)8691da98b53d44bd8d8f605fb1d323e3.png

 

(如果不小心关闭解决资源管理器,点击视图重新打开)6df1d2eaea3a4e24bc4ebd1040ff7f28.png

 2.创建源文件(xx.c是源文件xx.h是头文件)e83d21bf999d47929cf0cc9e9690c990.png

 

二.写代码

1.写出主函数

int main()

{

  return 0;

}

Q:为什么要敲空格空行be8b252635f34203b7e981e5a353c0c4.png

 

 

Int是一种函数返回类型(int是整型)

main是函数名

Q: int main函数是什么意思

17ff6722eb2345d988da87ece00b6d23.png

 

 Q: Return 0是什么

7885a28f76ef42278e732605fd8c2285.png

 

{ }中的内容是函数体

Q:函数体是什么

b112a0aafef44993aa57f0e6e359a35b.png

24fa0b935eb84866a40e2d1b2d80ec35.png

 主函数是一个程序的入口, C语言代码从主函数第一行开始执行

※一个工程有且仅有一个main函数,

一个工程可以有多个.c文件,

但是多个.c文件只能有一个main函数

2.库函数( Printf是一种库函数,意思是在屏幕上打印信息)

库函数的使用需要引用头文件(打招呼)

头文件  #include<stdio.h>(放置在第1行)

 

f0cc610a055145d3acc5681b103a8fe3.png

 

Q:头文件是什么

04f11c676da34e04b1806429a2eb9be4.png

[为看到结果,vs2013需要点击项目名称,属性系统,子系统控制台。 Vs2019不需要]

Q: Printf是什么

4583fac4a4054b70b801495d5b26008a.png

运行程序快捷键CTRL+fn+F5或点击调试,开始执行不调试

3.数据类型

f04fb481184f49b2b1c0615403abc1a2.png

 ·研究类型的大小

Step one打印一个整数

e3f5b04258254dc89dea57c502dd0434.png

 

Step two打印字符数据类型的大小

fd7584ed292f4ed6b7f2a592e3603a1c.png

  Sizeof是一个关键字,也是c语言中的操作符,作用是计算类型或者变量所占空间的大小

以此类推468d9746b4554e9e8f8133ba1b973aa9.png

 输出的结果是3dc0c6da48e74cd08d8b6f1c69a0437c.png

 sizeof的单位是字节byte

309b383f0ab841278699efd1cae3b6ee.png

 Q:为什么 long和int的大小相同

(参考C语言标准)4a03670eb9414a3e845204225686533f.png

 ·数据类型是用来创建变量的

4.变量、常量

¹变量

·创建一个变量dfba896a9c7a4f6f9bc1779f7eec049a.png

  Int是类型   age是变量的名字   =是赋值

变量意味着可变e5e3424f4de3472d9da44e441cd60200.png

 要将变量的数值表示出来,需要用printf库函数

2242717b708e4f29b069074f30ae7bef.png打印的类型7e916fa803bd495a95a3a524a1bf6873.png

 ·变量的分类

变量分为局部变量和全局变量

局部变量:在大括号内定义变量都称为局部变量08dca18c9ad84a929a4771139a785f74.png

 

全局变量:在大括号外部定义变量称为全局变量835dc8a84c8e430a83c607c3286d26eb.png

 

当局部变量和全局变量名字冲突的情况,局部优先5c3ecae804894330ac7af0ab58667be3.png

 但是不建议把全局变量和局部变量的名字写成一样的

·变量的使用

写一个代码,求两数相加917c59ecdaf34792833ffa0215066964.png

 (其中scanf函数是输出函数      &是将数据存放在该位置,也就是取地址的意思)

第9行的内容是scanf函数的标准写法

写入完成后会报错,将错误列表中。输出内容复制到整个源文件的第1行,前面加#define,后面加1

dbc6c649621b4b8dbeeacce228256609.png

  vs编译器提供的scanf_s函数,不能在其他编译器使用,不是c语言标准规定的内容

想完全解决这个问题,可以在Microsoft visual studio中搜索newc++file.cpp文件,右键单击编辑,用记事本打开,粘贴#define _CRT_SECURE_NO_WARNINGS 1

另存并替换,权限不够时,以管理员身份运行记事本,在记事本中打开该文件,重新复制粘贴操作以上。以后新建的文件自动添加这句话9c7379506811486e9feea0fbb537a468.png

·变量的作用域和生命周期

局部变量的作用域:变量所在的局部范围

全局变量的作用域:968e24d48ead40fca9143cecc181c6a9.png

 全局变量的作用域是整个工程,这里的第3行内容就是一个全局变量

在相同工程,不同的源文件中的全局变量也可以使用,需要用extern进行声明276714f3979044ff9b04eb5e2bb49841.png

 变量的生命周期是指变量的创建和销毁之间的之间的时间段

局部变量的生命周期:进入局部范围,生命开始初局部范围生命结束

全局变量的生命周期:整个程序的生命周期

 

常量:ead700eb4dc44b0d8ca8dbadbc9f5dc7.png

 字面常量7112a54b89c34deca6dc27ee741737e6.png

 const修饰的常变量d906fe8754004db3b11658d876d9fdbb.png

 这里的number就是常变量,具有常属性(不能被改变的属性)

但const修饰的常变量,并不能作为常量来使用,其本身仍然是变量15e7f7f3cc604cb78715b9f01e4de1a1.png

 arr是数组

#define定义的标识符常量8cc5961a87884fff9443a18633262143.png

 枚举常量(用于可以一一列举的常量)91d2173dffc445aa8e8f2d857eb3da82.png

 

这里的male ,female和secret就是变量的未来可能取值e8def0fac7514774a4cac035c7a320bf.png

 枚举常量默认赋值从0开始

5.字符串和转义字符,注释

字符串就是一串字符(用双引号括起来的一串字符),字符串的结束标志是\0的转义字符,字符串的末尾隐藏了\05f500db77b0c4fae9551e3280de4ea64.png

 验证\0的存在abb1b1725423499d857e3e49639a6e26.png

 在第7行代码中手动加入\002fb72a6772d427ea50049507d2d0683.png

 求字符串的长度2ce1c3391472491695102687562b02a5.png

 \0是作为字符串的结束标志存在,但不计入字符串的长度

36f35722a03146099d9a0f9b503e1eb5.png

  arr2后没有\0,所以打印出的大小是随机值

转义字符(转义字符可以用来解决问题)84bf73ff76644f669e6ad3879c35b26c.png

 这里的\转变了test中t的原来意思,f3376dc2acbc4a40849a1bec6719f1d5.png

 

如果要想打印test,则要将\test中的转义7abf7617c54d4da5b3698d7adbe784e4.png

 如果想要打印双引号,前面两个双引号会被识别成一对双引号,就发生了错误,所以此处要给需要表示的双引号加转义符号e06b41f59d6642dc95276b9396194152.png

 特殊的转义字符\ddd表示1~3个8进制数如\130bbd0b64e16d642c29c5e8f8af7cd8ba7.png

  X的ASCII码值是88,8进制的130是10进制的88

A的ASCII码值是65,10进制的65是101e7b0347bd0134fa6af830b785940ad15.png

 

 

\xdd表示2个16进制数字如\x30669e36361aa546a5b753cd0f60fe5caf.png

 

注意八进制数字没有8d0b8dc833382437e92cd421014b88119.png

 所以这个长度应该是14

注释6ecee8489d334200b7eabd75800e712d.png

 注释是用来解释复杂代码的

在代码前加∥,是C++注释风格

/*int b=0*/,是C语言注释风格(不支持嵌套注释)

常用C++注释风格

6.条件语句ef2c621797d54e4da268a7cfdafc6339.png

 7.循环语句02f61984a28b4ab587e6adca44a712c3.png

7ce068ca1a02405da030257036b568f5.png8.函数 

·求和的两种方式179f5907e0ff4b7298cbc84353aea309.png

 第一种方法没有使用函数的方式

d78fc7ce30734b1e8928bdf68bdf2e80.png

 第2种方法使用了Add函数的方式

(参数是函数与函数之间交流的方式)

9.数组(一种相同类型的元素的集合)406a686136de4250883e45b889f2b87a.png

  Int\char表示数据类型,arr\ch表示数据名称,[]表示元素个数,第8行内容为不完全初始化,剩余的默认为0

数组是用下标来访问的:当写出arr[0]时,访问第1个元素,依次类推;

将数组的内容全部打印出来bfdb5c44214545f7a272105fb9a35c32.png

10.操作符

算术操作符+    -   *  /    %

除号两端都是整数,执行整数除法

27035ca6fb8947eb96cd48e8534b440e.png

 除号两端有一个是小数,执行小数除法7efe95ce25ae4eedbd17e021f6efdc9b.png

 %表示取模(取余)09103f715ccf4cb19337acce8236359b.png

 

移位操作符>>   <<

左移操作符,移动的是二进制a0998a0c500f4ee2bed83256b7fe9689.png

 2:000000000000000000000000000010

向左移动一位00000000000000000000000000000100(4)

位操作符&(按位与)   ∧(按位或) |(按位异或)

赋值操作符0e9a649abb174541aaf19873c0378bda.png

 70cbaaa0bd5a433287210c7690bceb9d.png

 单目操作符44c5ff539ab540d1bed2b58fd4c94144.png

dac0858f7cef485f82f878dbaaf362c7.png

 !表示逻辑取反b2e56ad12a2a4414b7bbabed8529ca90.png

 

sizeof是计算类型或变量大小的操作符e49b142a577d45d89d93c05b2625c185.png

 sizeof后面的变量的括号可以省略,类型的括号不可以省略( 所以sizeof是操作符不是函数)

sizeof也可以计算数组的总大小(单位是字节)1c9d368d27bd4e019999ad8dbe3140c7.png

 也可以计算数组中某个元素的大小9ba9650b74f04b7189c39223aad7cf33.png

应用: 计算数组元素个数e6985d4d26f940faac14c086985a3b47.png

 

~对一个数的二进制按位取反c47db4eef5f3420396f9cbcf866d6043.png

 

把所有二进制位中数字,1变成0,0变成1

0二进制:00000000000000000000000000000000

所以二进制就变成了111111111111111111111111111111

整数在内存中存储的是补码(一个整数的二进制表示有三种:原码,反码,补码)

一个整数的最高位表示符号位:

-1:

100000000000000000000000000001(原码)

111111111111111111111111111110(反码)

111111111111111111111111111111(补码)

(反码的二进制序列加1得到补码)

Q:在什么地方加1

c2b026dbb5d54c2bb292b0a3ae8b23f2.png

 

规定:正整数的原码,反码,补码相同

++:自增运算符f73fe76080c54b5386e0f698e179e1f4.png

 

前置++计算规则,先++后使用68b3a1b4b2b94de68bdb69c30a835f0e.png

 

 Q:为什么a的值也是116c8c5de50f1d4d189494f5c5b8840984.png

 后置++运算规则:先使用后++4e4d72312e354380a4a63d9ebbb6e777.png

 (类型)强制类型转换58f3bf604983415493f53baec0f92ed2.png

e5df7c092f9441499cab5fb60441ba01.png 

 在3.14前加入(int),实现强制类型转换0ee198a11bbb424a8ad1c8d88e5176f4.png

 关系操作符

>    >=    <    <=     !=(不相等)     ==(相等)

逻辑操作符

&&逻辑与      II逻辑或

逻辑与中,只要有一个为假就为假,两个同时为真才为真b9c45139113242d6958e6b41b5c282e4.png

b7699950bcdb4b9f9ba15fd3233518ef.png 

 逻辑或中只要有一个为真结果就为真,只有两个都是假结果才为假b750ca516524464e9f7b4157ab80d772.png

 15d622fc9c9a4c6db967003b2085ebc0.png

 

条件操作符(三目操作符)

exp1?exp2:exp3(exp:表达式)

逻辑:

exp1如果成立, exp2计算,整个表达式的结果是esp2的结果;

exp1如果不成立,exp3计算,整个表达式的结果是exp3的结果2d166f6a71264eaab96771e87a1182d9.png

 逗号表达式:逗号隔开的一串表达式17a815cc0de44cdba26a8da0389c12bf.png

 下标引用、函数调用和结构成员

[]    ()    .    ->

1fdedc25c21b4062b567fbff375fc763.png

第1个[] 是定义数组时的语法,第2个是下标引用操作符36a492c2ed0842d3b1908d4bdc3137e7.png常见关键字71ff2ed142224cebbbf749e5b4866286.png

  C语言提供的关键字:

1. 是C语言提供的,不能自己创建关键字

2.变量名不能是关键字

auto是自动的-每一个局部变量都是auto修饰的6267335e4b0b4822808a8f2221558e96.png

extern是用来申明外部符号的

register寄存器关键字af88599a5801489e86c902e880b7c3d1.png

 计算机中数据可以存储到:寄存器、高速缓存、内存、硬盘、网盘

signed有符号的   unsigned无符号的

static静态的    struct结构体、关键字

switch语句    typedef类型定义

union联合体、共用体     void无、空   

( defind 、include的不是关键字,是预处理指令)

typedef类型重定义d4c359001f4d4793a18be12869e068d7.png

 可以将unsigned int重新定义为u_int3a2893bff2d94507bd948a6c5a160283.png

  static静态的:

1. static修饰局部变量

2. static修饰全局变量

3. static修饰函数

Example1377f1be351f74575a085a69f07ff52a3.png

e2d123291bc7421f91b9a6b65ce9c4cb.png a91b173ca44d486aba3da8a5b4ccf206.png

 在int a前加static016c2f26fb2243828ddecffd8582a65e.png

 da9faae340944e4a93c936ebfce5c693.png

  static修饰局部变量,改变了局部变量的生命周期(本质上改变了变量的存储类型)7a4e0940465c44f1b864c1a2e8f4d41a.png

  Example2

全局变量在整个工程中都可以使用0d37f811f9f5404d86b57a20fd7d8ca1.png

static修饰全局变量,使得这个全局变量只能在自己所在的源文件(.c)内部使用,其他源文件不能使用5ccf811a983e4c1eb6dfaa631492d278.png

 全局变量在其他源文件内部可以被使用,是因为全局变量具有外部链接属性;但是被static修饰之后就变成了内部链接属性,其他源文件就不能链接到这个静态的全局变量了

  Example 3

全局函数的基本使用05ffa7049e0d4daba632e9b86fa8d987.png

  static修饰函数,使得函数只能在自己所在的源文件内部使用,不能在其他源文件内部使用2efa81fbc6c5438b82afd9e23b0f5348.png

 

(本质上 static是将函数的外部连接属性变成内部连接属性)

11. #define定义常量和宏

define是一个预处理指令

1.define定义符号a78a0b72e00144dc8689a2135cd62fe8.png

 2. define定义宏a2978d3d787a4a069c17bc062fc3bac8.png

 如果4*ADD(2,3)06d39c56ea3346fb9e2198901e9cf5d5.png

 可以发现宏的作用方式是替换

所以宏的书写应该为1b81d0e914084789aa3f0650005785d1.png

 Q:宏是什么6de19be0dcdf4df5adc224afd4cdb04e.png

 12.指针

内存:

cc1619e946114465a9047f988c3297f6.png

2^32次方个内存单元9566154334464543bd6088743bc09401.png

 Q:内存是怎么编号的?一个这样的内存单元是多大空间?

一个内存单元是一个字节,然后分配地址。

173e9009d7354f55967c2051cae09d03.png

 打印出a的地址a15df704d471495ebafd7d1b2af1e6c6.png

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

负者歌于途_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值