当前位置: 首页 > news >正文

360网站怎么做ppt软件开发工程师招聘简章

360网站怎么做ppt,软件开发工程师招聘简章,南京h5网站建设,拼团手机网站开发文章目录 前言一、什么是C语言二、第一个C语言程序三、数据类型四、变量#xff0c;常量1、变量1.1 变量的命名1.2 变量的分类1.3 变量的使用1.4 变量的作用域和生命周期2、变量 五、字符串1. 概念2. 求解字符串的长度【strlen】3. 转义字符【含笔试题】 六、注释七、选择语句… 文章目录 前言一、什么是C语言二、第一个C语言程序三、数据类型四、变量常量1、变量1.1 变量的命名1.2 变量的分类1.3 变量的使用1.4 变量的作用域和生命周期2、变量 五、字符串1. 概念2. 求解字符串的长度【strlen】3. 转义字符【含笔试题】 六、注释七、选择语句八、循环语句九、函数十、数组1、数组的定义2、数组的下标3、数组的使用 十一、操作符1、算数运算符2、移位操作符3、位操作符4、赋值操作符5、单目操作符6、关系操作符7、逻辑操作符8、条件操作符9、逗号表达式10、其他 十二、常见关键字1、前言2、有关数据存储的底层原理3、typedef关键字4、static关键字4.1、static关键字修饰局部变量4.2、static关键字修饰全局变量4.3、static关键字修饰函数 十三、 #define 定义常量和宏十四、 指针1、引言2、内存的概念和介绍3、指针变量的大小 十五、结构体 前言 想必刚接触C语言的同学们不知道C语言是什么有什么用那么你来对了本系列就会带你入门C语言从入门到“入土”,开玩笑的正如标题所说本教程首先对C语言有一个初步的认识能够看懂别人写的是什么有一个大概的框架那么我要开始讲解了。 这一章主要是初始C语言的一个大纲。 一、什么是C语言 C语言是什么 语言汉语日语英语等。语言是一个自然语言是人与人交流的语言。 计算机语言类比过来是人与计算机之间的交流。 C语言是一门通用计算机编程语言广泛应用于底层开发。C语言的设计目标是提供一种能以简易 的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语 言。 尽管C语言提供了许多低级处理的功能但仍然保持着良好跨平台的特性 二、第一个C语言程序 我们在了解完C语言是什么后我们需要了解如何使用集成开发环境去完成第一个C语言程序。 什么是集成开发环境呢 集成开发环境IDEIntegrated Development Environment 是用于提供程序开发环境的应用程序一般包括代码编辑器、编译器、调试器和图形用户界面等工具。 像vscode就是一种编辑器它不是集成开发环境但是它可以添加许多的插件来编辑代各种形式的代码。 像vs2022就是一种集成开发环境在平时使用很方便但是存储空间比较大毕竟有好有缺点嘛不能两者兼容。 但是不要使用那种上古编译器比如VC,DEV… 接下来我们就开始正式写第一个C语言程序 进入官网下载VS2022不要去别的地方下载那些盗版的点击进入官网 点击个人免费下载学习下载这个完全够用了。 打开下载 打开软件创建一个新项目 在C语言的学习中大多数人的第一个程序就是hello word!那么我们怎么打印出hello word开始我们学习编程之旅下面就跟着我来一起学习。 我们知道C语言所有的字符符号都是英文的。C语言中代码是从main函数的第一行开始的。main函数是程序的入口一个工程中main函数有且只有一个。其中代码中的printf是编译器的头文件引入的可以直接使用。stido.h是头文件后缀为.c是源文件后缀.h为头文件。 #includestdio.h int main() {printf(hello world!\n);return 0; }有人可能看到我这里写的是int main(){ ... return 0},通常就是这样写的也是最普遍的写法 还有一种就是void main(){ },这种写法比较古老现在不会使用这种写法。 三、数据类型 写出了我们的第一个C语言程序接下来我们来说一说C语言中的数据类型 在了解数据类型前我们先探究为什么要写程序 是为了用程序解决生活中的一些问题。在现实生活中我们的各种数据有很多不同的类型为了更加丰富的表达生活中的各种值所以在C语言程序中设置这么多数据类型。 char //字符数据类型 short //短整型 int //整形 long //长整型 long long //更长的整形 float //单精度浮点数 double //双精度浮点数每种类型的字节大小是多少 下图所显示的就是 计算机中常见的单位bit(比特byte(字节KBMBGBTBPB。 他们的单位换算为 1 byte 8 bit 1 KB 1024 byte 1 MB 1024 KB 1 GB 1024 MB 1 TB 1024 GB 1 PB 1024 TB 四、变量常量 在生活中有些值是不变的比如圆周率性别身份证号码血型等等有些值是可变的比如年龄体重薪资等等引入了变量和常量的概念。 首先先讲述一下变量 1、变量 语法形式为type name。代码如下 int age 150; float weight 45.5f; //浮点数默认为双精度浮点数在后面加个f,说明是单精度浮点数类型 char ch w;1.1 变量的命名 只能由字母包括大小写数字下划线组成。不能以数字开头。长度不能超过63个字符。C语言是区分大小写的。变量名字不能以关键字命名字。变量的名字尽量有意义。 1.2 变量的分类 变量分为局部变量和全局变量 #include stdio.h int global 2019;//全局变量 int main() {int local 2018;//局部变量//下面定义的global会不会有问题int global 2020;//局部变量printf(global %d\n, global);return 0; }总结 上面的局部变量global变量的定义其实没有什么问题的 当局部变量和全局变量同名的时候局部变量优先使用。 1.3 变量的使用 了解了什么是变量现在我们就要具体地去使用这个变量了让我们一起来看看 #include stdio.h int main() {int num1 0;int num2 0;int sum 0;printf(输入两个操作数:);scanf(%d %d, num1, num2);sum num1 num2;printf(sum %d\n, sum);return 0; }在vs编译时会发现我们在这里会出现4996警告。 为什么会出现这个警告呢 是因为在vs中输入函数微软有自己的定义scanf_s而用scanf函数不安全。 如何消除这个警告呢 第一种方法就是把scanf()改成scanf_s()scanf()也是vs提供的这种方式很简单但是代码的跨平台可移植性就变差了不推荐这种方法。第二种方法就是在.c文件中添加#pragma warning(disable:4996)这样就不会提示这个告警了。跟着下图一步一步的操作 首先下载everthing软件下载好点击打开搜索newcfile.cpp打开文件 把这行粘贴进去#define _CRT_SECURE_NO_WARNINGS 1,后面还要加上个【1】不要忘了 这种方法一劳永逸可以很好的解决我们的问题~~ 再次创建一个.c文件可以看到自动就有那一行了 1.4 变量的作用域和生命周期 清楚了如果使用变量去编写程序接下来我们来看一下变量的作用域和生命周期 作用域 作用域scope是程序设计概念通常来说一段程序代码中所用到的名字并不总是有效/可用的通常来说一段代码中所用到的变量名并不总是有效的而限定这个名字的可用性的代码范围就是这个变量名的作用域。 了解了其基本概念我们就到代码中来演示一下 可以看到程序报错了说【未定义标识符】可以看出这个作用域具有限定范围的 int main() {{int a 10;printf(a %d, a);}printf(a %d, a);return 0; }以上的话就是局部变量的作用域从下面代码可以看出完全没有报出错误因为对于全局变量的作用域是从定义变量开始到整个程序运行结束整个变量才会被销毁而这个变量a则是在这个代码块结束之后便会销毁所以我们在后面才访问不到这个变量 对于全局变量的作用域还可以这样使用把这个b变量定义在add.c这个文件下然后我们在test.c这个文件定义一下这个变量b用这个extern声明一下即可 生命周期 变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段 局部变量的生命周期是进入作用域生命周期开始出作用域生命周期结束。 全局变量的生命周期是整个程序的生命周期 讲完了变量接下去我们来讲讲常量 2、变量 C语言中常量分为一下几种 字面常量const修饰的常变量#define 定义的标识符常量枚举常量 #include stdio.h //举例 enum Sex {MALE,FEMALE,SECRET }; //括号中的MALE,FEMALE,SECRET是枚举常量//#define的标识符常量 演示 #define MAX 100int main() {//字面常量演示3.14;//字面常量1000;//字面常量//const 修饰的常变量const float pai 3.14f; //这里的pai是const修饰的常变量pai 5.14;//是不能直接修改的printf(max %d\n, MAX);//枚举常量演示printf(%d\n, MALE);//0printf(%d\n, FEMALE);//1printf(%d\n, SECRET);//2//注枚举常量的默认是从0开始依次向下递增1的return 0; }常量就是不变的量,所以叫常量 五、字符串 1. 概念 在讲字符串之前我们先来看看下面这个因为在计算机中存储、表示的都是二进制所以我们打印出来的也会是一个二进制首先定义一个char类型的字符变量ch然后分别以%c、%d、%s去打印出来可以看到显示的结果各不相同%c打印的就是一个字符%d打印的则是这个字符在ASCLL码表中的值最后的%s打印的就是ch这个字符串 然后开始讲一讲字符串 概念双引号引起的一串字符叫做字符串 2. 求解字符串的长度【strlen】 说完了字符串了基本概念了解了什么是字符串接下去我们来看看如何入求解字符串的长度 对于字符串大家要知道结束标志是一个 \0 的转义字符转义字符我们下个模块就讲到这个\0表示这个字符串已经结束了。但是在计算字符串长度的时候这个\0是不计算在内的也是说求字符串的长度统计的是字符串中\0之前出现多少个字 那我们如何去求解一个字符串的长度呢 这里我们需要使用到一个【string.h】头文件里的一个函数叫做strlen()可以计算一个字符串的长度也就是\0之前的长度这个函数我们后面会细讲 printf(len %d\n, strlen(abc));前面我们说到过char类型可以定义一个字符变量不仅如此在这里我们还可以定义一个字符数组什么是字符数组呢就是这个数组中存放的都是字符我们来看一个具体的定义 char arr[] abcdef;以上就是字符数组的基本定义接着我们再来看一种下面这一种也是字符数组的定义方式 char arr2[] { a,b,c,d,e,f };可以看到这两个字符数组中的内容是一样那他们打印出来以及计算出来的长度是否是一样的呢我们一起来看一下 很明显从以上结果来看是不一样的这是为什么呢我们通过一张图示来了解一下 从以上这张图我们应该可以很明显地看出来为什么第二个arr2数组在打印的时候会出现【烫烫烫】这种东西呢如果你自己去编译器里试试的话应该也是这样这里为什么呢具体可以看看反汇编详解【函数栈帧】的创建和销毁因为第二个数组的内容值给到了’f’并不是一个完整的字符串但是第一个数组给到的却是一个完整的字符串所以自动拥有一个’\0’第二个数组就没了所以后面打印出来的只会是一个随机值然后直至碰到一个\0为止遍历才会结束所以我们可以看到这个长度也是受到了影响arr1数组的长度就是6但是arr2数组的长度却是加上了一些随机字符后的长度这就显得不准确了 3. 转义字符【含笔试题】 那什么叫做转义字符呢我们通过代码来看看 int main() {printf(abcndef);printf(abc\ndef); }通过运行结果我们可以看到这个n若是在其前面加上了一个\则它的意思就发生了变化在转义字符里面就叫做【\n换行】所以可以看到打印到【abc】就发生了换行在后一行打印了def 然后我们再来看到一个打印一个test.c的路径从运行结果来看并没有真正地打印出来一个路径而是出现了很多空格细心的小伙伴应该可以发现这个test的第一个字符t和路径的\是同一个颜色都淡化了在转义字符里这个叫做【\t水平制表符】也及时们键盘上的【Tab键】敲一下就能空出4个空格 所以我们在printf输出一个东西的时候不要去写一些转义字符那C语言中有哪些转义字符呢我们一起来看一下 用一个表格给大家呈现 转义字符释义?在书写连续多个问号时使用防止他们被解析成三字母词\ ’用于表示字符常量\“用于表示一个字符串内部的双引号\ \用于表示一个反斜杠防止它被解释为一个转义序列符\a警告字符蜂鸣\b退格符\f进纸符\n换行\r回车\t水平制表符\v垂直制表符\dddddd表示1~3个八进制的数字。如\130X\xdddd表示2个十六进制数字。 如\x30 0 我们挑重点的说一下 首先是二三两个看第一行代码若你printf的是一个【‘’‘】那么编译器就会报错你本是想打印一个【’】这个时候该怎么办呢你只需要在前面加上一个\这就变成了一个转义字符然后就可以像运行结果一样输出了然后第三个也是同理这里便不做过多详解 然后就是刚才我们所说的打印路径要怎样才能打印出这个路径呢没错只需要再添加一个【\】就可以了这就表示一个反斜杠我们到代码里看一下可以看到这个路径已经被完全打印出来了 最后我们再来讲一下最后两个有关八进制和十六进制的一样先给出运行结果 有关【\ddd】表示的就是八进制也就是通过八进制去计算如果用%d打印出来的就是计算的结果如果使用%c打印出来的就是这个数字所对应的ASCLL码符号 对于十六进制也是同理/xdd值就是十进制然后看上面的打印也是同理 对于【\x3a】的话就是用a*160 然后我们来说一道有关转义字符的笔试题 printf(%d\n, strlen(c:\test\628\test.c));这个结果是什么呢答案不尽相同而真正的答案是【14】为什么呢我们来看一下 分析 首先第一步我们刚学了转义字符【\t】表示的一定是一个字符所以18排除然后第二步相信大家最疑惑的就是这个\628这其实就是我们上面所说的\ddd但是这都能算吗这个时候你就要去想八进制能包含8吗八进制就是0~7的数字所以是不会有8因此这个【\62】算一个转义字符最后我们就可以得出答案为【14】 六、注释 首先我们要先了解一下注释是什么它可以用来干嘛 注释可以将你不需要或者还不想删除地代码暂时屏蔽起来在程序执行的时候会直接跳过注释的代码不会运行如果在一些程序中有一些晦涩难懂的代码可能你写出来的代码需要需要一些批注后面在阅读你代码的人才能知道这段代码是什么意思这个时候你就可以在这段代码的上方或是下方写一些注释这样后人就可以看懂你写的代码 int main() {//下面是创建一个整型变量并赋值10int a 10;int b 100;//C 注释风格 - C99/* C语言的注释风格int c 10;int d 20;printf(ff);*/ // - 嵌套的话此处结束注释//不支持嵌套注释return 0; }我们来分析一下对于双斜杠//这个是C99中对于C的注释风格那C语言的注释风格是怎样的呢就是/**/但是后面我还补充了一句话就是对于C语言的这种注释方法不可以产生嵌套的例如说这里若是在外层加上一个/**/这样return 0不会被注释了为什么呢因为上面的/*和return 0;上面的那个先匹配了所以就不会到下面的 七、选择语句 在C语言或是其他编程语言中都有着三种结构方式【顺序】、【选择】和【循环】那这个选择语句是什么呢就是你有时候会面临两种或多种选择不同的选择对应的就是不同的结果 具体我们通过代码来看一下 int main() {int input 0;printf(你要好好学习吗(1/0)\n);scanf(%d, input);if (input 1) {printf(拿一个好offer\n);}else {printf(回家种田\n);}return 0; }上面这一段代码就是一个选择语句你可以在终端输入你的选择问你要不要好好学习。若你选择的是1好好学习那么你就可以拿一个好offer但若是你选择0摆烂那么就只能回家种田 八、循环语句 然后我们再来说说另一种形式也就是循环语句 什么是循环呢循环就是你一直不断重复地做一件事直到某个条件满足时才会退出 然后我们通过一段代码再来看一下 int main() {int line 0;printf(好好学习\n);while (line 20000){printf(写代码%d\n, line);line;}if (line 20000)printf(好offer\n);return 0; }然后对于循环的话不仅仅是有while还有do…while()for这些我们在后续都会讲到 九、函数 函数其实就是将一个功能单独封装成为一个模块然后这个模块可以被多次调用以便来实现代码的简化 我们先来看这么一段代码这是一段两数求和的代码输入两个数据然后输出它们的和但是设想若是我们要再求另外两个数的和那么就要再次输入然后求和的代码就要再写一遍这就徒增了代码量显得整个程序很冗余那要怎么简化呢对就是使用函数。 int main() {int num1 0;int num2 0;int sum 0;printf(请输入两个操作数字:);scanf(%d %d, num1, num2);sum num1 num2;printf(sum %d\n, sum);return 0; }我们来看一下使用函数简化完之后是什么样子这段代码使用了三次求和得到了三个求和结果 int Add(int m, int n) {return (m n); } int main() {int sum1 0;int sum2 0;int sum3 0;sum1 Add(1, 2);sum2 Add(3, 4);sum3 Add(5, 6);printf(sum1 %d\n, sum1);printf(sum2 %d\n, sum2);printf(sum3 %d\n, sum3);return 0; }十、数组 1、数组的定义 首先我们知道数字这个概念但是当我们需要一堆的数字那么这个数字存到哪里去呢没错也就是用一个叫【数组】的东西存放起来那要怎么存放呢我们来看一下 int a[10] { 1,2,3,4,5,6,7,8,9,10 };首先需要先声明这个数组是什么类型的是整型、字符型还是浮点型等数组的话这些数据都是可以存储的然后在一个变量后面加上一个[]括号里可以写上你准备为这个数组开辟多大的空间比如说上面写的是10那么这个数组中最多能存下的数据也就只有10个但是若你不写的话就可以存多个后面会教大家一个方法去计算没有给出数据具体大小如何去求这个数组的大小这里先给出大家可以先看看sizeof()是一种单目操作符是用来计算你所使用的操作数所占的空间字节大小 int sz sizeof(a)/sizeof(a[0]);刚才说过数组除了可以存放整数数据外还可以存放字符型、浮点型的数据 char b[] { a,b,c}; double c[] {2.5,6.9,7.7,1.5 }2、数组的下标 知道了数组怎么声明那我们声明的这些数组怎么获取到呢 C语言规定数组的每个元素都有一个下标下标是从0开始的访问。下面就是我们通过下标去访问的a数组中下标为8的元素打印出来的就会是9 //下标访问数组元素 printf(%d\n, a[8]);具体大家看图示就能一目了然了 可以看到这里arr数组的大小是10那我们去访问18这下标会怎么样呢去编译器里看看 从图中可以看出总共下标也就只有9你访问到了那就会产生越界访问那么你访问到的就会是一个随机值 3、数组的使用 看一下代码。我们首先定义了一个大小而10的整型数组然后将其内容初始化为0然后我们通过一个在while循环中通过scanf去输入一些数据将其一一地通过下标放入数组中。然后呢还是一样通过循环去遍历这个数组调用printf去打印出里面的数据这就是数组的一种使用方法其余的我们放到后面数组章节细讲 int main() {int arr[10] { 0 };//0 ~ 9 - 输入10个值给数组int i 0;while (i 10) {scanf(%d, arr[i]);i;}i 0;while (i 10) {printf(%d , arr[i]);i;}return 0; }十一、操作符 C语言中操作符不少这里我们做简要介绍后续会详细讲解 1、算数运算符 这里我们重点来讲讲【除】和【取余】首先来看这段代码结果会是多少? int a 7 / 2; printf(%d\n, a);运行结果是3因为运算符的左右两边都是整数所以执行的是整数除法包括下面这段也是一样运行结果都是3只是因为float浮点数的原因小数点后多出6个0 float f 7 / 2; printf(%f\n, f);那怎么将其变为浮点数除法也就是得到3.5这个答案你只需要将7或2任意一个数字改为浮点数即可例如说7.0/2.0,至少有一个操作数是浮点数执行的才是浮点数除法 我们来看看结果 然后我们再来看看【取余】操作符 int main() {// % 取余操作符关注的是除法后的余数int a 7 % 2; //商3余1printf(%d\n, a);return 0; }取到就是一个整数对另一个整数做除法后的余数 2、移位操作符 这一块大家先了解一下先不做细讲会在操作符章节细讲 左移就是扩大 右移就是缩小 3、位操作符 上面叫移位这里叫位区别大吗区别可大了完全是两个概念 4、赋值操作符 有关赋值运算符第一个大家应该不陌生就是我们常见的赋值运算后面呢则是一些【加减乘除取余移位】这些复合而成的你可以到编译器里自己试试看 5、单目操作符 重点来说一下单目运算法 首先是这个取反操作在C语言中呢表示真假只有两种用0表示假用非0表示真所以看下面的代码这个a就是【真】所以会执行“haha”语句但若是你把a换成0那么!a就是【真】就会打印“hehe”语句 //C语言是如何表示真假的呢 //0表示假非0表示真 //-1 表示的就是真 int main() {//把假变成真把真变成假int a 10;if (a)printf(haha\n);if(!a) //这个不执行printf(hehe\n);return 0; }然后【取正】【取负】很简单看到下面代码会打印a的相反数 int a -10; printf(%d\n, a); printf(%d\n, -a);然后对于取地址和星号运算符我们在下面指针的部分介绍然后来看看sizeof()这个运算符sizeof()是一个函数吗不是的sizeof是一个操作符 int a 10; char c w; int arr[10] { 0 }; printf(%d\n, sizeof(a)); //4 printf(%d\n, sizeof(c)); //1 printf(%d\n, sizeof(arr)); //40对于sizeof()这个运算符呢它是用来计算所占内存空间的大小单位是字节所以上面代码的输出分别为整型、字符型和一个数组所占内存空间的大小因为这些变量都是用int、char这些变量类型定义出来的所以可以直接用sizeof()传入这些变量的类型出来的结果也是一样的 printf(%d\n, sizeof(a)); //4 printf(%d\n, sizeof(int)); //4 printf(%d\n, sizeof(c)); //1 printf(%d\n, sizeof(char)); //1既然这是一个操作符那干嘛要这个括号呢直接去掉不就好了不然引起歧义就像下面这样 printf(%d\n, sizeof int);我们在编译器上跑一下可以看到是不能运行的~~这其实就更好地可以说明sizeof是一个操作符不是函数括号可以省略然后我们就可以得出结论变量可去括号类型不可取去括号 上面我们有提到过当我们没有对一个数组设定初始化元素个数时可以使用sizeof()去计算这个数组中有多少元素 就是下面这样sizeof(arr)就是整个数组的大小sizeof(arr[0])便是一个元素的大小当然你也可以写成【sizeof(int)】因为整型数组中一个元素的大小一定是4个字节也就是int所占的字节大小 printf(%d\n, sizeof(arr));; int sz sizeof(arr) / sizeof(arr[0]); printf(%d\n, sz);然后我们来说一下 【前置、后置–】与【 前置、后置】 这两个其实是一样的我们先来看一下【 前置、后置】对于前置的话就是先在赋值所以下面的a会把完之后的值给到b然后自己也会因此最后输出的便是11 11 int a 10; int b a; //先后赋值 // a a 1 // b aprintf(%d %d\n, a, b); //11 11对于后置就不一样了刚好相反就是c会先把自己的值给到d然后自己再所以d得到的就是10c后面完后之后就是11 int c 10; int d c; //先赋值后 // d c; // c c 1printf(%d %d\n, c, d); //11 10然后我们来说【前置、后置–】同理 int a 10; int b --a; ///先--在赋值printf(%d %d\n, a, b); //9 9int c 10; int d c--; ///先赋值后--printf(%d %d\n, c, d); //9 10然后这一段也是一样首先打印a–的一定是之前的值然后打印的就是–之后的值也就是9 int a 10; printf(%d\n, a--); //先使用后-- printf(%d\n, a);对于前置、后置的±老是喜欢出一些面试题把你搞晕其实根本没什么意义我们来看看 int a 1; int b (a) (a) (a); printf(%d\n, b);从VS来看这段代码的运行结果是12但是在Linux的gcc编译器中运行结果竟然是10 一段代码在不同编译器运行结果不同说明这段代码其实有问题的准确的说是存在歧义的 我们来讲单目操作符的最后一个强制类型转换 首先来看这两句代码你认为这会输出什么 int a 3.14; printf(%d\n, a);因为3.14给到了一个整型变量a,所以只会保留整数这个时候大家看下面我用红笔画起来的一段Warning说这个【从“double”转换到“int”】可能会丢失数据这个时候应该怎么办呢你可以在3.14前面加上一个(int)将这个数强制转换成整型也就是我上面注释掉的一行代码这个时候你再去运行试试就不会报出Warning了 6、关系操作符 对于前面的四个直接用就可以了和直观地进行一个比较。我们来讲一下后面的两个也就是比较两个数是否相等与不等这个要与【赋值运算符】中的【】做区别一个是比较两个数或是变量的另一个则是进行赋值运算的不混淆了 int a 10; int b 20;if (a b)printf(haha\n); if(a ! b)printf(hehe\n);那这个时候就有同学问了除了这个数字的比较可以比较字符串吗我们来看看 char arr1[] abcdef; char arr2[] abcdef; if (arr1 arr2)printf(\n); elseprintf(!\n);可以看到两个字符数组明明是一样的但是却走了第二个分支打印了【!】这里其实就出问题了。为什么呢这个我们后面会说到数组名是整个数组的首元素地址其实【】比较的是它们的地址对于字符串的比较在C语言中有专门的函数叫做strcmp()它和strlen()一样都是属于【string.h】头文件里的若比较的两者相等的话则会返回0前者大于后者返回 0的数后者大于前置返回 0的数所以只需要去判断一下去和0的大小即可 //两个字符串不可以用“”来判断是否相等使用strcmp库函数 char arr1[] abcdef; char arr2[] abcdef; if (strcmp(arr1,arr2) 0)printf(\n); elseprintf(!\n);这样的话结果就正确了 7、逻辑操作符 逻辑与【】是并且的意思逻辑或【| |】是或者的意思。为真则为1为假则为0对于逻辑与只有两个数均为1是才为1只要有一个为0结果即为0 int a 5; int b 4; int c a b; printf(c %d\n, c); if (a b)printf(hehe\n);从上述代码和运行结果可以看出因为a,b都不是0因此它们的结果为1才可以进入下面那个if判断若是把a,b其中任意一个改为0则结果便为0然后不会进入下面的这个判断对于逻辑或的话只要其中有一个为1则为1只有两个数均为0是才为0所以下面的显示结果是0并且没有进入这个if条件的判断 int a 0; int b 0; int c a b; printf(c %d\n, c); if (a || b)printf(hehe\n);8、条件操作符 下面是一段简单的if分支判断然后给b赋值 int a 10; int b 0; if (a 5)b 3; elseb -3; printf(b %d\n, b);但是对于三目运算符来说不用这么麻烦只需要这么一句就好了具体意思就是判断a是否大于5若是则将b赋值为3若不是则将b赋值为-3 a 5 ? b 3 : b -3;但是其还有更简便的写法也是一样去判断最后把得出来的值给到左边的b即可 b (a 5 ? 3 : -3);9、逗号表达式 我们先来说一下其运算规则从左向右依次计算整个表达式的结果是最后一个表示式的结果 列举了一个逗号表达式大家可以去自己试着计算一下每过一个表达式参与运算的变量都会改变最后看打印出的abc的值也是发生了变化 int a 3; int b 5; int c 0; int d (a 2, b b - c a, c a b);//a 5 b 10 c 5 10 15 printf(d %d\n, d); printf(%d %d %d\n, a, b, c);10、其他 【下标引用操作符】 什么是下标引用操作符呢也就是这个[ ]我们在定义数组的时候指定的数组大小 int arr[10] { 0 }; arr[4] 5; printf(%d\n, arr[4]);对于上面这段代码我们称arr4 是 [ ]的两个操作符我们回忆一下【】运算符这是一个双目运算符比如说2 3那么就可以称2 3 是 的两个操作符对于我们来说2 3可以写成3 2既然双目运算符可以这么交换着来做那【下标引用操作符】可以吗答案是可以的上面这段代码我们还可以写成这样 int arr[10] { 0 }; 4[arr] 5; printf(%d\n, 4[arr]);接下来的话是这个叫【函数调用】的操作符 int Add(int x, int y) {return (x y); } int main() {int c Add(2, 3); //()是函数调用操作符操作数是Add 2 3printf(c %d\n, c);return 0; }很明确就是函数外面的两个小括号这个我们在上面说到sizeof()操作符时也提到过对于sizeof()虽然其有()但是不可以把它认为是一个函数它也会是一个操作符然后对于函数调用操作符的话看到上面的Add函数()是操作符那么操作数就是Add 2 3 十二、常见关键字 1、前言 了解了C语言中的常见运算符接下来我们来看看C语言中的关键字 首先对于关键字我们要注意的两点是 1、关键字是直接使用的我们得了解 2、变量名不能是关键字 从下面这些可以看出在C语言中关键字还是蛮多的 首先单独说一下【auto】它比较特殊因为在编译器中当你定义一个变量的时候默认就是存在的auto翻译过来就是自动的在C语言里指得是自动变量所有你定义的局部变量都是自动创建、自动销毁的所以局部变量都是auto修饰的就像下面这个整型变量a你在int的前面加上或是不加auto 都是不会报错的 原因就是所有局部变量都是auto //auto int a 10; int a 10; //auto可以省略2、有关数据存储的底层原理 有关寄存器这个东西涉及到了数据存储我们来详细说一下让大家先了解一下这个底层原理 首先你要知道在计算机中的数据是存放在哪里的 ①内存 ②硬盘 ③高速缓存 ④寄存器 然后我们再通过这张图来了解一下 对于计算机中的寄存器其实它所空间是很小的单位只有字节但是它的读写速度非常快可以直接与CPU【中央处理器】进行交互 然后越往下这个空间越大内存的话现在普遍都是8G16G这样大一点有32G不会像很早之前的只有2MB这样对于硬盘的话我们去市场上买也是500G1个T这样的大小 我们的寄存器因为它的读取速度很快因此CPU直接到寄存器里面拿数据但这个时候寄存器内存不够大了怎么办呢装不过这么多这个时候我们所知道的高速缓存也就是Cache会给寄存器提供内存那高速缓存里又不够了这个时候就继续让内存给它提供。这样的话整体地提高了计算机的运行效率 下面就是【register】这个关键字的用法在定义这个变量b的时候加上了这个关键字就是【建议】编译器把这个变量放到寄存器中这里要注意只是建议而不是直接放入 具体再如何使用大家可以去查阅一些资料这里不做过多详解 //建议把b放到寄存器中 register int b 10;3、typedef关键字 首先就是这个【typedef】这个关键字的话是用来重命名的用在结构体上会比较多 typedef struct Linknode{int data[MaxSize];struct Linknode* next; }LNode;当然它不止应用在结构体上对于一些数据类型也是可以重命名的例如下面这个【unsigned int】后面你在使用【uint】定义变量的时候就和【unsigned int】一样 typedef unsigned int uint;int main() {unsigned int num1 0;uint num2 0; //与num1一样return 0; }4、static关键字 最后再来说一下这个static关键字 这里是来说说C语言中的static关键字首先你要了解static关键字可以用来修饰什么,它主要是可以用来修饰下面三个 修饰局部变量修饰全局变量修饰函数 4.1、static关键字修饰局部变量 首先我们来看看static对于局部变量的修饰 void test() {int a 3;a;printf(%d , a); } int main() {int i 0;while (i 10){test();i;}return 0; }你认为上面这段程序会输出什么。看到主程序使用while循环来控制i变量当i 10的时候边不会进入循环所以是会循环10次然后看内部的test()函数每次循环调用这个函数的时候都会定义一个变量a然后之后变为4然后输出所以这段程序的运行结果是会输出10个4 然后我们修改一下这个定义的变量a,将其设置为静态变量也就是在int前面加上一个static修饰那这个时候你认为上面那段程序会打印出什么呢 static int a 3;首先你要了解静态变量的特性以及其余普通变量之前的区别 ①普通的局部变量是放在内存的栈区上的进入局部范围变量创建出了局部范围变量销毁 ②当static修饰局部变量时局部变量是在静态区开辟空间的这时的局部变量出了作用域变量不销毁下次进去作用域使用的是上一次遗留的数据改变了存储位置由栈区–静态区使得变量的生命周期发生了变化 知道了这些你应该清楚这个打印结果是多少了4~13每一次进入这个test()函数时这个变量a将不再被执行也就是只会在第一次进入这个函数的时候定义之后就会一直存在知道这个程序结束时它才会被销毁所以这个变量a每次保留的便是上一次后的结果 看到了上面的结果对于静态变量修饰成员相信你也有了一个初步的了解对于普通的局部变量是存储在栈区上的。但是对于静态变量你知道它是存储在什么地方的吗没错就静态区我们通过下面这张图再来了解一下在计算机内存中变量到底是如何存储的 4.2、static关键字修饰全局变量 add.c int g_val 2022;test.c extern int g_val; //声明外部符号 int main() {printf(%d\n, g_val);return 0; }以上的这种全局变量声明以及【extern】关键字调用是声明一个变量但是若这个g_val变量被定义成了静态变量会怎么样呢我们来看看 可以看到这个外部命令无法被解析 全局变量是具有外部链接属性的如果全局变量被static修饰外部链接属性就变成了内部链接属性其他源文件就没法再通过链接找到这个符号 所以可以得出结论static修饰后的局部变量只能在自己所在的.c文件内部使用~ 4.3、static关键字修饰函数 其实这个理念也是一样的若你不使用static修饰那你可以用extern关键字做一个引入那它就是一个外部链接但若是你使用static修饰那么这个函数就只能本源文件使用不可以给到外部的文件使用这就是一个内部链接了 可以看到也是同理这是一个内部链接外部是访问不到的即使是有这个extern关键字 十三、 #define 定义常量和宏 首先来说说这个#define去定义常量 #define MAX 100 int main() {printf(%d\n, MAX);int a MAX;int arr[MAX] { 0 };printf(%d\n, a);return 0; }看到如上代码我使用#define定义了一个MAX常量并且其值为100在main函数中你就可以直接使用这个常量对它进行打印、赋值 当然除了定义整型数据常量其他类型也是可以的例如字符串也可以 #define STR abcdef printf(%s\n, STR);讲完使用#define去定义常量我们再来说说宏定义它也是利用#define去声明的 下面有一个求和的函数以及宏定义求和的写法 //函数 int Add(int x, int y) {return x y; } //宏 #define ADD(x,y) ((x) (y)) //为了保持整体性除了求和的功能外其实你还可以定义其他功能例如说比较两个数的较大值就可以像下面这么去写使用一个三目运算符即可 #define MAX(x,y) ((x) (y) ? (x) : (y))十四、 指针 1、引言 对于指针这一块很多同学在刚开始学习C语言的时候就听别人说起过说指针很难很难访问内存、取地址这些操作既危险又难搞 2、内存的概念和介绍 对于指针这一块的话是直接和计算机中的内存发生关系的所以我们先来讲讲内存相关的知识带大家先行了解一下底层的知识 对于内存大家在日常生活中应该也有听到过例如我们为电脑、笔记本买的内存条以及我们手机的内存对于这个内存来说一般都是8G或是16个G与内存相对应的那就是硬盘一般的话都是500G或是1个T这样 在计算机中内存是一块连续的存储空间但是这样就无法分配到每一个部分进行使用这个时候呢就将内存分成了一块块小的内存单元那为了能够有效的访问到内存的每个单元就给内存单元进行了编号这些编号就被称为该内存单元的地址 从上面这张图示就可以很直观地看出内存在计算机中到底是如何存储的每一个内存单元的大小都是一个字节然后为它们都进行了编号这样在外界需要访问时就可以根据这个内存编号去指定进行一个访问这个一个个编号其实就被称为是地址 知晓了地址的基本概念后我们再来到编译器中去看看这个地址究竟是怎样分部的 首先我们来看最简单的一句代码就是定义一个变量a,我们都知道int整型的变量在内存中是占4个字节的我们在这句代码上打个断点进入内存窗口一看究竟 int main() {int a 4; }输入这个【a】就可以看到内存中为变量a开辟的4个内存单元首地址就是从【0x00CFF814】开始整型变量占4个字节看我框起来的这4个就是对于每一个字节它都有自己的一个编号, a呢就是取到第一个字节的地址 那我们要怎么使用代码去获取这个地址呢 a // 拿到的值第一个字节的地址我们通过调试窗口再来看一下。很明显得到了我们想要的结果 或者你不想到调试窗口中去看的话也是可以的我们直接printf打印出来即可可以看到这里使用的是%p这是专门对于地址访问的如果你是%d出来的就是格式化后的数字了 讲完了内存讲完了地址接下去才是真正的指针但其实对于地址来说它就是指针指针是地址的一个别名下面就来看一下指针是如何去定义的 int a 4; int* pa a;可以看到在int类型后我加上了一个【*】星号这就说明这是一个指针类型的变量这个pa就是【指针变量】因为上面说过指针是地址的别名所以这个等式是成立的pa这个指针变量可以去接收a的地址也存放了a的地址 既然这个指针变量存放了变量的地址那么可不可以通过这个指针变量去访问到这个地址并且把它打印出来呢答案是可以的这就是涉及到我们的下一个知识点就是指针的解引用 利用【*】这个操作符 *pa上面定义了pa就是一个指针变量*pa其实就是通过pa中存放的地址找到这个地址所存放的空间这个时候取到的其实就是变量a,因为取到了这个地址这块空间上所存放的起始就是a变量的内容我们通过运行来看一下 小结 ①指针其实就是地址地址就是内存单元的编号 ②把地址进行存储的时候就可以放到一个变量中这个变量就是【指针变量】 ③我们说的指针实际上在专业术语中叫做【指针变量】 ④【*】星号解引用可以通过存放变量的地址快速访问到那个变量在内存中所存放的位置继而获取内容 3、指针变量的大小 求一个变量的大小就是用sizeof()这个关键字 int a 10; printf(%d\n,sizeof(a)); printf(%d\n,sizeof(int));上面这段代码的打印就是4 4那请问下面这段呢 int a 10; int* pa a; printf(%d\n,sizeof(pa)); printf(%d\n,sizeof(int*));很明显也是4 4 在编译器的偏左上角有一个x64和x86这个东西叫做【运行环境】x64代表你在64位OS的环境下运行代码x86代表的就是32位,刚才我选择的是32位现在我把它改成64位 很明显一样的代码但是在不同的运行环境下所产生的值却不同 指针变量存放的就是地址所以指针变量的大小取决于存储一个地址需要多大的空间 要看到不是地址其实是存储的地址线没错就是硬件上的地址线 我们所用的电脑其实就是硬件是硬件的话就需要通电那在我们的电脑上其实就存在着这么一种【地址线】我们上面所说的32位与64位也可以对应到这个地址线中因为在32位的环境下是32根地址线64位环境下就是64根地址线当我们是32根地址线时在通电之后就会有一个电信号这个电信号就是0/1那这些电信号具体是怎样的呢我们来看一下 就是0101这样的存储方式然后根据二进制的逢二进一去罗列出这32根地址线可以存储下多少地址这里告诉你一共是有232个地址可以存储那这其实就可以得出结论了32个0或者1组成得的地址序列需要32个bit也就是4个byte去存放而这4个字节也就对应着我们指针变量的大小因此就可以得出为什么指针变量的大小是4个字节了然后来解释一下为什么在64位环境下这个指针变量就变成了8个字节这其实你自己也可以去推导32个0或1组成的地址序列需要32个比特位那么这里便需要64个比特位根据1B 8bit所以就需要8个byte去存放这也可以得出在64位环境下指针变量的大小是8个字节 了解了上面这些知道了指针变量的大小取决于地址的大小下面我们来看看这些指针变量的大小是多少我是在32位环境下运行的 printf(%d\n, sizeof(short*)); printf(%d\n, sizeof(long*)); printf(%d\n, sizeof(long long*)); printf(%d\n, sizeof(float*)); printf(%d\n, sizeof(double*));是1 4 8 4 8 吗如果是这个答案的话请你再回去仔细看一下上面的推导过程我们来看一下运行结果 可以看到均为4它们都是指针变量指针变量求它的大小看的是什么看到就是地址的大小上面说了我是在32位环境下运行的因此就是32根地址线需要32个bit也就是4个byte去存放 可以看到报了很多Warning这是为什么呢明明这个代码就是可以运行的而且还可以出结果这里报了一个【符号不匹配】的问题为什么呢这里明确说一下sizeof()计算数据字节大小的时候默认返回的类型是unsigned int也就是无符号整型但%d是用来打印整型变量的所以这里才会出现【符号不匹配】的问题 应该将其修改问%zu去打印才对你只要记住它是专门用来打印sizeof()的返回值的就行了不行深入了解也没关系修改如下可以看到已经一个Warning都没有了 十五、结构体 对于结构体也是C语言中比较重要的一个部分因为C语言是一门面向过程的语言它不像C、Java那样面向对象具有类可以在类内定义成员变量和成员方法所以C中就有了结构体这一个东西可以用来描述复杂对象 我们都去书店买过书知道书它有书名、出版社、作者这些都可以定义为字符类型但是还有书的价格怎么定义呢难道也定义成字符类型吗当然不是依旧是定义成浮点类型除了这些其实还有很多种类需要去定义但是对于这么多的类型都要分开吗这肯定不行这样这本书就不是一个整体了如果你有面向对象的思维就知道它的属性和行为都是定义在这一个类中都是封装好的这就是类的封装在C语言中我们也可以实现封装那就是用结构体 我们以学生类型来做一个封装 可以看到我们使用到了struct这个关键字这个就是在关键字那一模块所属要留在这里讲解的关键字stu就是student的简写。可以看到里面有着三种类型分别是姓名、年龄和成绩因为一个学生都具备这三种属性这是他们共同的属性所以可以将他们封装在一起 struct stu {char name[20]; //姓名int age; //年龄float score; //成绩 };那对于结构体这种复合类型怎么去定义变量进行初始化呢我们来看看其实和普通变量也是一样的你要把【struct stu】看做是一个类型用这个类型定义出来的变量就叫做【结构体变量】对于每个结构体变量的初始化都需要使用一对大括号{}里面去一一按照顺序去初始化你在结构体中定义的变量温馨提示这里的float成绩类型后面加上f与double类型作为区分 struct stu s1 { zhangsan,20,80.5f }; struct stu s2 { lisi,25,90.5f };那初始化了这些变量后如何将他们打印出来呢也就访问到每一个同学的信息 这里就要使用到【.】点操作符这个也是我们前面留下的这个操作符可以去通过结构体声明出来的变量访问当前这个变量所具有的信息代码如下 //格式结构体变量.结构体成员 printf(%s %d %f\n, s1.name, s1.age, s1.score); printf(%s %d %f\n, s2.name, s2.age, s2.score);好初识C语言就到这里结束了希望对大家有帮助
http://www.hkea.cn/news/14345230/

相关文章:

  • 高端定制网站开发建站教程详解小程序开发模板源码
  • 哪个网站可以做兼职ppt模板邯郸最近发生的重大新闻
  • 这么做钓鱼网站wordpress和shopex
  • 做国内打不开的网站长沙网站搭建关键词排名
  • 唐山网站公司建站阿里巴巴网站做推广效果怎么样
  • 有关做粪污处理设备的企业网站腊肉网站的建设前景
  • 网站白名单查询网站怎么获得流量
  • 商丘高端网站建设怎样进行seo
  • 开通网站主机网站设计说明范文
  • 局域网wordpress建站网络推广项目代理
  • 电商公司建设网站网站广告网络推广价格低
  • 南昌做网站建设哪家好欧美风格网站模版
  • 一站式做网站企业网页版qq登录入口官网手机
  • 厦门网站建设制作北京建筑设计院排名推荐
  • 中山企业门户网站建设让别人做网站注意事项
  • 企业网站虚假宣称iso9001的处罚案例相城高端网站建设
  • 网站域名免费挪威网站后缀
  • 带状疱疹的预防措施短视频seo公司
  • 简述一个商务网站建设的步骤wordpress不能上传
  • 装修公司做网站推广能接到活吗500个免费视频素材
  • wordpress 批量友情链接宁波seo哪家好
  • 朔州网站设计公司外卖平台做网站
  • 中国建设工程网官方网站设计师网址导航sdc
  • 杭州做产地证去哪个网站网站建站目标
  • 使用oss做静态网站自己的网站怎么赚钱
  • 中国空间站的意义局机关网站建设改进措施
  • 企业全屏网站南昌百度推广公司
  • 淘宝做导航网站有哪些广州做网站哪家公司好
  • 婚庆网站制作公司app开发公司账务处理
  • 中国林业工程建设协会网站北京市网站开发公司