初识C语言

目录

git工具的简化使用

VS2019的基本使用

什么是C语言?

第一个C语言程序

数据类型

变量和常量

定义变量的方法

 变量的分类

 变量的使用

变量的作用域和生命周期(两者界限相对模糊)

常量

 字符串

转义字符

注释 

选择语句

 循环语句

 函数

数组

操作符

关键字(C语言内置存在的)

 #defne定义常量和宏

宏定义

 指针

 指针变量的大小

结构体


git工具的简化使用

  1. git工具是版本管理工具。(记录每一个版本的代码)默认git工具采用的是命令行形式。
  2. git的网站有Gitee和GitHub,Github(国外网站,访问速度慢)和Gitee(国内网站,访问速度快)是一种代码托管的网站(类似于qq空间中相册保存照片)。
  3. TortoiseGit是一种图形化的工具,使得git可以不通过命令行而通过图形化界面形式来实现操作。
  4. gitclone克隆远程仓库到本地电脑
  5. add -> commit -> push从本地电脑提交代码到远程仓库的过程。 

VS2019的基本使用

  1. VS的拖拽:选中的模块可以拖动移动位置。
  2. VS的解决方案资源管理器不显示问题:                                242357db28024f05815a0579cc39848f.png
  3. VS的行号的设置:工具->选项->文本编辑器->c/c++->行号

什么是C语言?

  1.  C语言是一门通用的计算机编程语言,广泛应用于底层开发。C语言提供了许多低级处理功能,依旧保持良好的跨平台性。
  2. 为了避免各个开发厂商使用C语言语法差异,制定了C语言的标准。由美国国家标准局为C语言制定的ANSI C为C语言的标准。国际标准化组织(ISO)和国际电工委员会(IEC)发布了的C11标准是C语言的第三个官方标准,也是C语言最新标准,该标准更好的支持了汉字函数名和汉字标识符。C89/C99.....C11(目前主流是C89/C99)。K&R标准是C语言之父定义的标准。(C语言之父,丹尼斯里奇和肯·汤普逊)
  3. C语言是一门面向过程的计算机编程语言。
  4. C语言的主要编译器有Clang、GCC、MSVC....
  5. C语言的发展史:二进制->汇编助记符->B语言->C语言。人与计算机交流:计算机语言(C/C++/java/python.....)
  6. 底层软件包含操作系统、驱动层,底层软件之上的是应用软件。驱动层用于关联硬件和操作系统。
  7. 集成开发环境(各种功能的集成):编辑器、编译器、链接器、调试器。vs2019就是集成开发环境  ,内部集成了msvc编译器。
  8. vs2019的使用:新建项目过程,定义项目名称(项目文件夹)->在项目文件夹上添加.c/.h文件,此时定义。c/.h文件的名字。在项目文件夹里双击.sln文件既可以打开项目文件。
  9. test.c/test.h文件(C语言代码就是.c/.h文件,.c是源文件,.h是头文件)-(编译器)->test.exe

第一个C语言程序

6d0c69354982470a8feeb8499257b0e5.png

int类型和return类型对应是c99标准规定的

数据类型

  1. char   字符数据类型(字符和字符串有区别,C语言中字符用单引号,字符串用双引号)98d351b63c0c49a68cb1e04b99e5ed77.png
  2. short   短整型(short int)
  3. int   整型
  4. long   长整型(long int)
  5. long long    更长的整型(long long int)
  6. float   单精度浮点型
  7. double   双精度浮点型
  8. C语言中sizeof()函数是用来计算变量/使用创建变量的类型的大小,大小单位是字节。(类型决定变量大小)(数据类型多是为了描述更多的不同的数据以及节约空间)6a35ef325738477b9675e8254782beac.png
  9. 1byte=8bit;1kb=1024b;1mb=1024kb;1gb=1024mb;1tb=1024gb;

变量和常量

不变的值,C语言中用常量概念来表示,变化的值C语言中用变量来表示。

定义变量的方法

d852f21c883447e98cec0882481d6377.png

变量的创建要在内存中开辟空间,开辟空间的大小与类型息息相关。

变量在定义时候初始化是一种良好的代码风格。

定义变量不初始化,赋值为随机值。

 变量的分类

局部变量和全局变量(局部变量和全局变量重名,局部变量优先)

b57770895d7249e09f555a330eab0736.png

C语言中一个{}就是一个代码块,代码块内定义的是局部变量,代码块外定义的是全局变量。

定义的全局变量不论数据怎么变化,他定义的空间一直在全局变量定义的空间上。

 变量的使用

c65e7bb30c1b4edf914ff7b383107bf9.png0bf204954d724f8fac241c3be2d4ec13.png

28d42e9b57e64d3b91ee9ad554170cc2.png

变量的作用域和生命周期(两者界限相对模糊)

  1. 作用域是程序设计的概念,通常来说,一段程序代码中所用到的名字并不是一直有效的,而限定这个名字可用性的代码范围就是这个名字的作用域。全局变量的作用域就是整个工程;局部变量的作用域就是变量所在的局部范围,即{}内。(宽度)
  2. 生命周期指的是变量从创建到销毁的一个时间段。全局变量的生命周期:整个程序生命周期;局部变量的生命周期:进入作用域生命周期开始,离开作用域生命周期结束。(长度)
  3. 在C99标准之前规定,变量要创建在代码块最前方,C99之后就支持了变量在哪里使用就在哪里定义。
  4. 局部变量作用域:变量所在的局部范围。全局变量作用域:整个工程。
  5. 局部变量生命周期:变量所在的局部范围。全局变量生命周期:主函数范围。

常量

C语言中常量分为:字面常量,const常变量,#define定义的标识符常量,枚举常量。

数组初始化时候可不定义长度

  1. 字面常量             83f25cd12f8f48b4b1a0a214ee75ad1f.png
  2. const常变量        a48286908639497e9de25f2935bf68dc.pngb867a0cbc0c0497ea6b030d0f4750882.png
  3. #define定义的标识符常量e5bdb271fec647bd932155322bf7bd5c.png6703df2077ff4fb69544693f48a969db.png70bd96dde5db4bf8b8695351f457d2f7.png
  4. 枚举常量            070dbca10ec84f99930b6e2bb275e4b7.pngddc5676aaea54befbef3bdff9340cee0.png

 字符串

C语言规定由双引号直接引起来的一串字符称为字符串字面值,简称字符串。

字符串结束的标志是一个\0的转义字符,在计算字符串长度时候\0是结束标志,不算字符串内容。(sizeof()用来计算字符的个数,strlen()用来计算字符串的长度)。

    char arr[] = { 'a','b','c','d','\0' ,'\n'};
	printf("%s\n", arr);//abcd
	printf("%d\n", strlen(arr));//4
	printf("%d\n", sizeof(arr));//6


    char arr[] = { 'a','b','c','d' ,'\n' };
	printf("%s\n", arr);//乱码
	printf("%d\n", strlen(arr));//未知
    printf("%d\n", sizeof(arr));//5


    char arr[50] = { 'a','b','h' };
	printf("%s\n", arr);//abh
	printf("%d\n", strlen(arr));//3
    printf("%d\n", sizeof(arr));//50


    char arr[2] = "abc";
	printf("%s\n", arr);//乱码
	printf("%d\n", strlen(arr));//未知
	printf("%d\n", sizeof(arr));//2


    char arr[4] = "abc";
	printf("%s\n", arr);//abc
	printf("%d\n", strlen(arr));//3
	printf("%d\n", sizeof(arr));//4
  1. 定义字符串的方法a48190c24b21471daa77d6a112abb91e.png
  2. 要区别字符的定义和字符串的定义:char ch = 'a'; 定义字符且只可以存一个,这种方式不可以直接存字符串。
  3. C语言定义字符串只可以用char类型,因为字符串是由一个个字符拼接而成的。
  4. 数组的长度和字符串长度的区别:数组长度表示字符的个数长度,包含\0;字符串长度表示在遇见\0之前的字符个数,不包含\0。c882947abc0d4635b4c7465ce6a85aec.png
  5. 一个英文字符占位8个bit,即1byte。
  6. C99标准以前不支持变长数组,C99标准支持变长数组。变长数组是指数组长度为变量。vs2019不支持C99标准。
  7. 示例(乱码部分不算在数组长度内,乱码部分一般计入字符串长度内)e205c2e10c434a938b685e4be51f6eb9.png
  8. 数组部分初始化  f42cdd126bda4d018785663461d06d39.png
  9. 有数组长度且大于字符项时候,没有\0,数组不会乱码报错;没有数组长度时候,数组项目后没有\0会乱码报错。
  10. 计算字符串长度的库函数是strlen(),属于string.h头文件。(库函数归属头文件的查询软件MSDN或者cplusplus网站)3258e20648c14d65a256f7dbd71f670e.png

转义字符

  1. 示例1(单独的\不被识别为一个字符)                 24abae33b3b546ada1f68980e6245d9b.png
  2. 转义字符用单引号引起来,算作是一个字符。(双引号引起来的用%s打印,单引号引起来的用%c打印)319f9bf6f1244c4f9a0ce09b3415a732.png
  3. 常见的转义字符:\'表示常量'   \"表示字符串内部的"   \\表示一个反斜杠,防止他被解析为一个转义序列符   \b退格符   \n换行   \r回车   \t水平制表符   \ddd中ddd表示1~3个八进制的数字,比如\156或者\52、\6   \xdd中dd表示2个十六进制数字   打印\ddd或者\xdd的话打印的是转为十进制的对应的ASCII值d33b8629b46a47f591d9b4ff19056be4.png
  4. 示例2                  e7c7b9938df94679836dd13a4126732a.png

注释 

  1.  注释可以用于提示文字的添加,也可以用于注释暂时不用的代码。
  2. 注释风格/*   */    或者   //
  3. 注释的快捷键ctrl+shift+/

选择语句

示例(C语言中0为假其他的非0判断为真,if后的()里为判断后真假值)                     0ec76832a35243d0b499661c96e25476.png

 循环语句

三种循环语句:for循环,while循环,do...while循环

示例(循环的必要条件:定义循环变量,判断循环条件,循环变量自增/自减f13f36e0e39d4905b97b79885c673586.png

 函数

C语言把一些独立的功能封装成一个函数。

91f2d1eb083c40f0ba2d9cce2bf2828d.png

 函数可以放在前面或者后面(放在后面需要在前面声明),建议写在前面。

27312c09969c45e48a451e7f5cd88ce0.png

 函数的特点是简化代码,代码复用。

数组

C语言中给出了数组的定义:一组相同类型的元素的集合。

f3ec443a653541ac9fa983c71cdeec68.png

 数组长度大于数组项数时,后面未定义数组项为0;\0就相当于0    a202b052a5614d78a999711151acccf1.png

 数组的每一个元素都有下标,下标从0开始,数组可以通过下标访问。

a45be434503b492b95b6a5a05a0bd2cf.png

数组的使用:                        4530172773dd4d0aa643f78dd38fd4fa.png

	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	char arr1[] = "abcdefg";
	printf("%s\n", arr1);
	char arr2[10] = "abc";
	printf("%s\n", arr2);
	for (int i = 0; i < strlen(arr1); i++)
	{
		printf("%c\n", arr1[i]);
	}

操作符

  1. 算术操作符   + - * / %(取余)(取余只能用于整型)                                                         f086ccd113a346b1ad05fe5e2459317e.png15a97f9fa69e447db7c2308fd280978a.png
        int a = 9;
    	int b = 4;//参与运算的两个数必须是整型
    	float c = a % b;
    	printf("%f", c);//1.000000
    0ff5e821165349409205065862252a85.png
  2. 移位操作符(针对二进制,针对一个数的二进制位进行操作,左移补0移位操作,右移删除操作)转二进制->移位操作。>>右移  <<左移 (将一个数转化为二进制之后进行左右移位86b205f07cac4da6901d39e79669c6a9.png
  3. 位操作符(针对二进制,针对一个数的每一位二进制位进行操作)&按位与   |按位或   ^按位异或(按位异或就是相同为0,相异为1)对于一个负数而言先求补码再进行运算(计算机中数据存储以二进制形式),由于正数的原码和补码相同,所以可以直接计算。
    	int a = 3;
    	int b = 5;
    	int c = a & b;
    	int d = a | b;
    	printf("%d %d", c, d);//1 7
    
    
    
    
        int a = -4;
    	int b = -6;
    	int c = a & b;
    	int d = a | b;
    	int e = a ^ b;
    	printf("%d %d %d", c, d, e);//-8 -2 6
  4. 赋值操作符:赋值操作符 =   复合赋值操作符 +=、-=、*=、/=(a+=4------>a=a+4;)7298a474273248028d6703c6f5ba37fa.png
  5. 单目操作符(逻辑取反操作符即真变假,假变真按位取反是对数据的补码进行取反,取反以后的值为整数则可以直接使用,为负数则需要转为补码,因为在计算机内部存储的是补码。正数的补码原码反码都是一样的,负数的则不同。符号位参与运算。05f0721d6a3744e4b1ce6941c3c5b4b0.png
        int a = -2;
    	int b = ~a;//对于符号位也取反
    	printf("%d", b);//1
    
    
    
    
        int a = 1;
    	printf("%d", (~a));//-2
    4cf75006ca364bbc8e54ea79d48eacc0.png7d9d19674e2445918c389ddd9c3cac54.png21b7a6944f7d48ddb2357f655063ddd4.png
        int a = (int)3.1415926;//强制类型转化
    	printf("%d", a);//3
  6. 关系操作符 >   >=   <   <=   !=   ==(通过关系操作符可以返回一个真假值)
  7. 逻辑操作符 逻辑与&&   逻辑或||(针对的是表达式和变量,返回的是真假值)                                                                         098e9e9535884cb0aab5fdc8160660aa.png48089eec35b040219215eda7002ad591.png2b309776996842fbb4f642872aadd46a.png
  8. 条件操作符(简化的if语句f6d27e94b7374bc1b82f4c8c70d7bc39.png
  9. 逗号表达式(从左到右依次进行,整个逗号表达式的结果是最后一个表达式的结果)(x=3是一个表达式)
    int a = 3;
    int b = 5;
    int c = 10;
    
    int d = (a + 2, b = a - 3, c = b + 4);
    printf("%d %d %d %d", a, b, c, d);//3 0 4 4
    948356acd07049aab2dcedb8122e0ad8.pngf7005ec30ade46a3bc767bfacbb7af17.png8f6c9f38e2fa4765af188273a7c86091.png
  10. 下标引用,函数调用操作符   数组下标引用符号[]   函数调用符号()  

关键字(C语言内置存在的)

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

  1. auto自动变量,自动创建,自动回收(所有的局部变量都是自动变量)
  2. break(终止循环)和continue(跳出本次循环)常用于循环;break和default用于switch。
  3. typedef顾名思义就是类型定义,这里应该理解为类型的重命名。(给类型起一个别名)3e3aa25ce1ab4fe8a9e42506fdc03342.png
  4. register寄存器关键字   CPU-->寄存器-->高速缓存器-->内存-->硬盘-->网盘(register的速度快,造价高,空间小)8b2093d9af124f1084b498965d3d8f6b.png
  5. enum(枚举)struct(结构体)union(联合体)这三个关键字可以自定义类型。
  6. static修饰变量和函数,static修饰的变量和函数称为静态变量和静态函数。
  • (1) static修饰局部变量改变了变量的生命周期,让静态局部变量出了作用域依然存在,直到程序结束生命周期才结束。(作用域不变,但是生命周期变长了,本质是改变了变量的存储类型,栈区存储——————>静态区存储 )       fe941a81e17e4a1784ca40173b395227.png714d23d916c54d83b5f9f05078892255.png
  • (2)static修饰全局变量使得这个全局变量只能在本源文件内使用,不可以在其他源文件内使用。26603b597d6745e8aa936b51fe3ca775.png0e577c17310f4b688a2ee01dd35e1df2.png
  • (3)static修饰函数使得这个函数只能在本源文件使用,不可以在其他文件使用。22920bb00a954ddcb76dfcb9827298b2.png7cbc18e6f1fc460cb0e59bfb16ac0e38.png

 #defne定义常量和宏

#define是预处理命令,编译C语言的第一步就是预处理阶段,这一个阶段就是宏发挥作用阶段。C预处理器在源代码编译之前对其进行一些文本性质操作,主要包括删除注释,插入被#include进来的文件,定义和替换由#define定义的符号。(文本性质操作就是指一段文本替换成为另一段文本,而不考虑其中任何语义内容。)

宏定义

  1. 宏常量:我们最常用的就是#define定义一个符号常量。c2c803fbaa5b4af2af8fb87d76808cad.png
  2. 宏语句:我们还可以用宏定义一条或者多条语句。661c70a01ba64c6aaab77b3b019d53d1.png
  3. 宏函数:我们还可以用宏来定义函数,因为宏定义可以带参数。b0a30497beeb4e5aa33c561bf4700426.png88dda36f0362493ca6a7c672f70fe486.png                             对于宏定义和普通函数而言都是那里调用在此处使用一次,只是宏定义的参数是以表达式形式使用,函数定义的参数是直接使用表达式的结果。e75d47c62461413788de1b94751a2e4c.png

 指针

  • 内存是电脑上特别重要的存储器,计算机上的程序都是运行在内存中进行的。为了有效的使用内存就把内存划分为一个个小的内存单元,每个内存单元的大小是一个字节。为了可以有效的访问到内存每个单元就给内存单元进行了编号,这些编号就被称为该内存单元的地址
  • 变量是创建在内存中的(在内存中分配空间),每个内存单元都有地址,所以变量也是有地址的。(变量的地址以所占的内存单元的第一个地址为准
  • 指针变量是用来存放地址的。地址被称为指针。
  • &a是指获取到了地址,获取到了变量在内存中的位置,只有解引用才能获取到对应的值。scanf函数是通过获取地址给变量赋值。67f963bf864a4269bb9f75f6d0c31326.png
  •  定义指针变量:                 6196b01e13b14e1ca27bdc6ed834019a.png
  • 解引用操作符*的使用(解析地址,*p<=>num)8bdabc98c0d541d8b060ae87456b0b82.png
  • 解释说明                             

 指针变量的大小

指针变量的大小取决于编译出的程序是多少位的,编译出的程序是多少位的取决于编译平台。X86是32位编译平台,编译32位程序;x64是64位编译平台,编译64位程序。32位是4字节,64位是8字节。

32为平台和64位平台区别:不同位数代表不同的地址线,不同位数代表识别的内存大小有区别。(位数多表示控制的字节数多,2^32个字节   2^64个字节)可以理解为地址就是不同位数平台的数字个数所描述含义

运算能力->数据总线位数=处理器字长:32位数据总线——计算机最多同时处理32位的数据。寻址能力->地址总线位数:N根地址线可以访问2^N个存储单元(本质上是N条地址线排列组合可以有 2^N个状态)

  • 指针就是地址,64位CPU拥有更大的寻址能力,拥有更大的内存。(64位的平台兼容32位的程序)6a7dcb6cf4da4dd8901ddcc3ee699bc2.png4e7d8ce561b34502afdf69116f037423.png
  • 寄存器的简单介绍:(只有64位的CPU才能支持64位系统平台,64位的系统才支持3.25GB以上的内存,64位的系统不可以装在32位CPU电脑上)                      3112172cb9644be487091e1596a3837d.png

寄存器内部可以存放任何数据。

结构体

结构体使得C语言具有描述复杂类型的能力。(不同的类型组合在一起)c4304e7a99794b5eadae3bed14ff8289.pngd73f17e8eb7641c1911b9a7d96935981.png

 一个汉字占两个字节,一个英文占一个字节。

c语言的数据类型:内置数据类型(char,int,short,long,long long,float,double)自定义数据类型(结构体,枚举,联合体)(C/C++中数组是内置的数据类型,但不是基础数据类型而是构造数据类型,语义上是有限个占据连续物理空间的相同数据元素的有序集合。)

define不是关键字,是预处理指令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值