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

中国十大网站建设常熟网站制作哪家好

中国十大网站建设,常熟网站制作哪家好,wordpress更换端口,做静态网站用什么软件目录 一、什么是C语言#xff1f; 二、第一个C语言程序 起源 代码 程序分析 程序运行 一个工程中出现两个及以上的main函数 代码 运行结果 分析 三、数据类型 数据各种类型 为什么会有这么多的数据类型#xff1f; 计算机单位 各个数据类型的大小 注意事项 数据… 目录 一、什么是C语言 二、第一个C语言程序 起源 代码 程序分析 程序运行 一个工程中出现两个及以上的main函数 代码 运行结果 分析 三、数据类型 数据各种类型 为什么会有这么多的数据类型 计算机单位 各个数据类型的大小 注意事项 数据类型的使用 四、变量和常量 变量的分类 变量的使用 创建变量的注意事项 变量的作用域和生命周期 常量 五、字符串转义字符注释 字符串 转义字符 注释 六、选择语句 七、循环语句 八、函数 九、数组 数组是什么呢 定义数组 数组的使用 十、操作符 十一、常见关键字 十二、#define 定义常量和宏 #define定义的标识符常量 定义宏 十三、指针 前言 引例 计算机是怎么对内存单元编号的呢 内存空间的地址如何得到 想存地址怎么办 ​ 本质目的不是为了存地址 指针变量的大小 十四、结构体 为什么会有结构体呢 创建结构体 本文主要是先带大家全局的认识一下C语言将C语言的主要的东西都看看了解一下对C语言先产生一个认识每个知识点后面都会单独写博客详细介绍。 一、什么是C语言 C语言是一门通用的计算机编程语言广泛应用于底层开发C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程 语言保持着良好跨平台的特性。 由于C语言的各大优点使得各大开发厂商纷纷使用并且各个厂商都有了自己的C语言这就使得各厂商的C语言语法出现差异为了避免这种情况由美国国家标准局为C语言制定了一套完整的美国国家标准语法称为ANSI C作为C语言最初的标准。 并且C语言是一门面向过程的编程语言编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。其中MSVC便是微软的C语言编译器VS2019中的C语言便是MSVC编译器。编译环境的详细搭建步骤我也已经写了请点击这里查看C语言编译环境的搭建。  计算机语言类比理解表 语言用途举例人类的语言人与人之间交流汉语英语计算机语言人与计算机交流的语言 语言广泛应用于底层的软件开发 二、第一个C语言程序 起源 第一个C语言程序是Hello, world,这是C语言之父创造的梗“Hello, world程序是指在计算机屏幕上输出“Hello world”这行字符串的计算机程序“Hello World”的中文意思是“你好世界。”。这个例程在 Brian Kernighan 和 Dennis M. Ritchie合著的The C Programme Language使用而广泛流行。因为它的简洁实用并包含了一个该版本的C程序首次在1974年 Brian Kernighan 所撰写的 Programming in C: A Tutorial 出现。 代码 #include stdio.h int main() {printf(Hello world!);return 0; } 程序分析 一个C语言代码中必须包含一个main函数--主函数main函数是程序的入口有固定写法。要注意的是一个工程中只能有一个main函数。 main前面的int表示函数返回类型为整型左花括号表示函数开始右花括号表示函数结束花括号所包含的部分叫做函数体为该函数所要实现的逻辑功能语句。return 0表示返回值是00为整数与前面的int相呼应。printf----print function----打印函数而printf属于库函数是C语言自身提供的函数库函数的使用必须要引用头文件所以使用了#include stdio.h。stdio--standard input output--标准输入输出函数 程序运行 在菜单栏中有 调试--开始执行(快捷键CtrlF5) 一个工程中出现两个及以上的main函数 我们用一段代码来验证一下 代码 #include stdio.h int main() {printf(Hello world!);return 0; } int main() {printf(Hello world!);return 0; } 运行结果 编译器报错 如果是在同一个工程中不同的.c文件中呢也是一样的同一个工程中只能有一个main函数。 分析 我们前面说过main函数是程序的入口如果一个工程出现多个main函数那么这个程序到底从哪里开始执行从哪个main函数进去是不确定的。 三、数据类型 我们在生活中经常会用到各种各样的数据例如年龄体重价格等等而不同的数据的类型也是不一样的比如年龄是整数体重是小数。 我们写程序写软件也是为了能够解决生活中的问题描述生活中的问题所以C语言它有各种数据类型。 数据各种类型 char字符数据类型字符 short 短整型整数int 整型long长整型long long更长的整型float单精度浮点数小数double双精度浮点数 为什么会有这么多的数据类型 我们的生活中本来就有很多种数据类型在写代码的时候我们选择合适的数据类型去创建变量解决问题使得空间利用率更高并且更加丰富的表达生活中的各种值。 计算机单位 各个数据类型的大小 C语言中有一个关键字sizeof可以用来计算各种变量数据类型的大小 如下代码 #include stdio.h int main() {printf(%d\n, sizeof(char));printf(%d\n, sizeof(short));printf(%d\n, sizeof(int));printf(%d\n, sizeof(long));printf(%d\n, sizeof(long long));printf(%d\n, sizeof(float));printf(%d\n, sizeof(double)); } 运行结果 注意事项 注意sizeof计算出来的结果单位是字节 这里所打印出来的结果不是一成不变的C语言没有规定每种变量必须占几个字节因为具体每个变量占据的内存大小和编译器以及操作系统强相关了 我们会发现int为整型而long是长整型结果运行结果中int和long的大小一样这是怎么回事呢注意在这里C语言标准规定sizeof(int)sizeof(long),并且sizeof(long)sizeof(long long) 在32位平台sizeof(long)大小为4个字节而在64位平台sizeof(long)大小为8个字节 数据类型的使用 选择合适的数据类型如下代码 int main() {//这里创建一个年龄的变量//short的范围为-3276832767足够表示年龄short age 18;//创建一个变量表示体重double weight 58.9;return 0; } 四、变量和常量 变量生活中有些值是可变的年龄身高体重等C语言中用变量来表示 常量有些值是不变的身份证号血型等C语言中用常量来表示 变量的分类 局部变量全局变量 我们通过这段代码来了解全局变量与局部变量 include stdio.h //全局变量 int i 20; int main() {//局部变量int i 10; printf(%d\n, i);return 0; } 运行结果 那么这里为什么运行结果是10而不是20呢 有几个点需要注意 花括号外面的为全局变量花括号里面的为局部变量当全局变量与局部变量名字相同时局部变量优先局部变量和全局变量的名字建议不要相同--容易误会产生bug 变量的使用 #include stdio.h int main() {int n1 0; //定义整型变量n1,n2和num并初始化为0int n2 0;int sum 0;printf(请输入n1和n2\n); //提示用户输入scanf(%d%d, n1, n2); //输入想要进行运算的两个数sum n1 n2; //将n1和n2相加并赋值给sumprintf(sum%d\n, sum); //打印sum的值return 0; } 说明 scanf函数代码中用到scanf函数,属于库函数也是要引头文件stdio.h。按用户指定的格式从键盘上把数据输入到指定的变量之中这行代码就是让用户从键盘输入两个整数到n1和n2的空间当中%d表示以整数形式进行输入后面的n1表示取地址n1将输入的第一个整数存储到n1的空间中,n2也是如此。一句话概括就是通过键盘给程序中的变量赋值。 注意事项 在 scanf 的“输入参数”中变量前面的取地址符不要忘记“输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应。“输入控制符”的类型和变量所定义的类型一定要一致。对于从键盘输入的数据的类型数据是用户输入的开发者是无法决定的所以在写程序时要考虑容错处理。使用 scanf 之前先用 printf 提示输入 printf函数%d表示以整数形式进行打印。 这两个函数中其中格式控制字符串用于指定格式。格式控制串可由格式字符串和非格式字符串两种组成。格式字符串是以%开头的字符串在%后面跟有各种格式字符以说明输出数据的类型、形式、长度、小数位数等如下所示 %d      //打印整型 %c      //打印字符 %f      //打印浮点数 %p      //以地址的形式打印打印地址 %x      //打印16进制整数 %o      //打印8进制整数 创建变量的注意事项 必须要明确指定类型变量名不能随便起要求变量名必须由“数字字母下划线”构成并且不能用数字做开头起的变量名能够做到见名知意创建变量的时候初始化不一定是必要的但是必须要有eg.只写一个int a;未初始化的变量里面的内容很可能是一个错误的随机值后续代码如果直接读取了这个未初始化的变量可能就会有一些问题旧版本的编译器往往要求变量的创建要在当前代码块花括号的起始位置 变量的作用域和生命周期 作用域scope这个变量哪里可以使用哪里可以起作用哪里就是它的作用域 局部变量的作用域是变量所在的局部范围。 全局变量的作用域是整个工程。 生命周期变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段 局部变量的生命周期是进入作用域生命周期开始出作用域生命周期结束全局变量的生命周期是整个程序的生命周期。 可以通过以下代码的对比来深刻理解作用域 代码1 #include stdio.h int main() {{int n 10;printf(n%d\n, n);}return 0; } 运行结果 代码2 #include stdio.h int main() {{int n 10;//printf(n%d\n, n);}printf(n%d\n, n);return 0; } 运行结果 分析离int n 10最近的花括号所包含的里面就是变量n的作用域它的地盘而一但出了花括号它就不起作用了。所以就会报错。 代码3 #include stdio.h int a 10; //全局变量 void test() //这里定义一个函数进行测试 {printf(test--a%d\n, a); } int main() {printf(a%d\n, a);test();return 0; } 运行结果 从代码3就可以看出全局变量的作用域更广即整个工程。 常量 C语言中的常量和变量的定义的形式有所差异 C语言中的常量分为以下几种 字面常量const修饰的常变量#define定义的标识符常量枚举常量 通过以下代码来理解这几种常量 代码1 1.字面常量 #include stdio.h int main() {//1.字面常量55;9.8;b;//直接写出来的常量就被称为字面常量return 0; } 代码2与代码3进行对比 #include stdio.h int main() {int a 10;printf(a%d\n, a);a 20;printf(a%d\n, a);return 0; } 运行结果 代码3 2.const修饰的常变量 #include stdio.h int main() { //2.const修饰的常变量const int a 10; //用const进行修饰使其成为常变量printf(a%d\n, a);a 20;printf(a%d\n, a);return 0; } 运行结果 通过代码2和代码3的对比即可发现a本身为变量但被const修饰之后它本质上还是一个变量但它又具有了常属性不能改在使用常量的时候是不能用const修饰的常变量的但可以用它去表示一个不能变的量具备常属性的一个变量 比如以下情况 在创建数组的时候数组的长度应该是指定的一个确定的常数虽然n被const修饰之后具有了常属性但它本质上还是一个变量不能作为数组长度来使用。 3.#define定义的标识符常量 代码1 代码2 可以看到这AGE也是不能被修改的因为它是一种常量 4.枚举常量 在生活中有很多的取值是可以一一列举的 eg. 性别男女保密 三原色红绿蓝 星期1234567 如下代码 注意枚举常量也同样是不能改变的从运行结果就可看出枚举常量它是有具体的值的eg.RED值为0GREEN值为1BLUE值为2。 五、字符串转义字符注释 字符串 我们首先来认识一下字符串前面我们写过这样一个代码 #include stdio.h int main() {printf(hello world!\n);return 0; } 在printf函数里面被 包含的部分即为字符串这里的\n表示换行的意思 以下几种情况均为字符串 abcde b       //空字符串 这种由双引号引起来的一串字符称为字符串字面值简称字符串 注意字符串的结束标志是一个\0 的转义字符。在计算字符串长度的时候\0 是结束标志不算作字符串内容。通过以下代码来理解 #include stdio.h int main() {char arr1[] qwert;char arr2[] { q,w,e,r,t };printf(%s\n, arr1);printf(%s\n, arr2); } 大家可以想想这段代码打印的结果是什么呢 结果如下 发现arr1正常打印但arr2的打印结果为什么这么奇怪呢 接下来我们仔细分析一下 在VS2019编译器中按F10进行调试然后打开监视器窗口 可以在监视器窗口中看到arr1和arr2中存的内容 通过这个我们可以发现arr1中有\0,所以在打印过程中遇到\0停了下来arr2中没有\0打印完qwert之后还未停下继续往后打印而后面都是随机值所以就打印出来烫烫烫\0本身的值为0所以在往后打印过程中恰好有一个值为0遇到结束标志打印结束。 那么我们就可以手动的给arr2后面添加\0或者0来让它具有结束的标志不会出错打印随机值。如下代码 我们这里再介绍C语言提供的一个库函数strlen--string length--字符串长度,这是用来计算字符串长度的遇到\0结束不计算\0头文件为string.h  通过以下代码来理解 我们会看到arr1里卖弄一共5个字符长度为5没有问题但这个arr2由于没有\0作为结束标志后面全部都是随机值所以strlen一直往后计算直到遇到第22个值为0才结束计算 所以它计算出来的21本身就是一个随机值。同样可以后面添加\0或者0来解决 这里其实我们也可以通过关键字sizeof来计算但要注意的是sizeof会将\0计算进去。如下代码及结果 转义字符 前面我们见到过\n,\0这样的字符都是转义字符 我们可以通过以下代码来体验一下将c:\code\test.c打印在屏幕上以下代码到底能不能实现 代码0 通过运行发现打印的并不是我们想要的结果这个时候就有了转义字符转变它原来的意思的概念。通过以下两段代码对比理解一下 代码1 代码2 通过对比我们就可以发现在n前面加上\后它就已经不是单纯的n了而有了其他的作用换行代码保存路径以及请按任意键关闭窗口与hello之间有个空行而代码1没有\n,所以就没有空行。所以在这里\n就是一个转义字符了。回过头看代码0里面的\t也是一个转义字符了即水平制表符。 下来我们可以看看都有哪些转义字符 C语言转义字符 转义字符含义\?在书写连续多个问号时使用防止他们被解析成三字母词\用于表示字符常量\“用于表示一个字符串内部的双引号\\用于表示一个反斜杠防止它被解释为一个转义序列符。\a警告字符蜂鸣\b退格符\f进纸符\n换行\r回车\t水平制表符\v垂直制表符\dddddd表示1~3个八进制的数字。 如 \130 X\xdddd表示2个十六进制数字。 如 \x30 0 对以上的转义字符解释 \?  这个转义字符来源于三字母词----??)编译器在编译的时候总会将??)打印为]而我们如果想要让这里的就只是一个普通的就可以写成\??)这样的话第一个问号它就会被打印为问号要想两个都被打印出来可以写成\?\?)即可\  我们通过以下代码对比来学习这个转义字符 代码1打印字符a 发现成功打印出来字符a 代码2打印字符单引号 #include stdio.h int main() {printf(%c\n, );return 0; } 运行程序发现程序报错那么这又是什么原因呢 就是因为三个单引号放在一起自动的前两个单引号结合后面单引号落单了所以就会报错这个时候就可以使用转义字符\ 使它成为一个普通的字符单引号字符\也是如此不在啰嗦。如下代码 3.\\  双斜杠这个转义字符其实它的用途就是我们刚才的代码0我们想要将代码路径c:\code\test.c打印到屏幕上但是里面的\t 是一个转义字符现在我们不想让它转义就想让他打印出来\t,我们就可以使用\\将它再次转义使\t 里面的斜杠就只是一个斜杠如下 4.\t  水平制表符相当于起到了电脑键盘table键的作用 5.接下来我们来说说最后两个转义字符\ddd和\xdd  涉及到8进制和16进制 平时我们用到的10进制数就是由0-9这10个数构成的那么8进制就是由0-7这8个数构成16进制就是由0123456789ABCDEF来表示A--10B--11C--12D--13E--14F--15在\后面跟3个8进制数eg.\061 运行以下代码看看结果 可以看到结果是1但是8进制数061的10进制数也不是1呀为什么结果是1呢因为在这里它是一个字符将8进制数转化为10进制数49ASCII码值之后所对应的那个字符是1。 再详细说说我们的键盘上可以敲出来一系列的字符eg.#$%^*,但是计算机只能识别二进制呀所以人们就给字符编了统一的号码eg.  a--97,b--98………将这种编码称为ASCII编码有专门的ASCII码表而字符1的ASCII值为49转化为8进制也就是061。 \xdd 这个转义字符我们就不再啰嗦和\ddd同样的道理 下面来一道笔试题进行练习 //程序打印的结果是什么 #include stdio.h int main() {printf(%d\n, strlen(abcdef));printf(%d\n, strlen(c:\test\328\test.c));return 0; } 这段代码的运行结果是什么呢可以先想想  第一个printf的答案比较简单就是字符串的长度6注意strlen函数不计算\0,而第二个printf的答案呢18  12还是说14 这几个答案都不对。 我们来分析一下在c:\test\328\test.c这个字符串里面首先\t是转义字符作为一个整体算作一个字符\328,这里面的8已经超出了8进制的范围8在这里本身就是一个坑所以应该将\32作为一个整体16进制所以第二个printf打印的结果应该是14 注释 代码中有不需要的代码可以直接删除也可以注释掉代码中有些代码比较难懂可以加一下注释文字 注意 C语言风格的注释/*xxxxxx*/存在缺陷不能嵌套注释嵌套注释就会出问题 C风格的注释//xxxxxxx,可以注释一行也可以注释多行 六、选择语句 我们的生活中总是面临着各种各样的选择怎么选就看自己了 通过以下代码来体验一下 这段代码用到了一个if else语句当if后面圆括号里面的判断条件为真时执行if下面的语句当条件为假时执行else后面的语句 七、循环语句 在我们色生活中也会有很多的事情都在重复eg.起床干饭学习睡觉 C语言里面有3种循环 while语句for语句do……while语句 通过以下代码来体验一下 八、函数 在数学中我们经常和函数打交道eg. f(x,y)xy这是一个二元函数该函数有两个参数变量x和y,那么其实C语言里面的函数和这个也是非常相似的。通过以下代码来了解一下 我们之前计算加法都是直接sumxy这样来算的但在这段代码中我们定义了一个函数Add来计算加法。首先创建了两个变量x,y和z,调用Add函数并将Add函数的返回值赋给z,最后将z的值打印了出来。 重点再来看一下Add函数前面的int表示该函数的返回值为int类型后面括号里面的int x,int y表示Add函数的两个参数均为int类型。花括号里面即为函数体创建了临时变量z来接受xy的值并在最后将作为返回值返回 函数的特点简化代码代码复用 九、数组 数组是什么呢 数组其实就是一组数。比如我们平时要存放一个数10那么只需要int a 10;就可以完成那如果要存放12345这5个数字呢不可能创建5个整型变量来存放吧这样创建和使用都会很麻烦所以这个时候就有了数组的概念----一组相同类型元素的集合。 定义数组 int arr[10] { 0,1,2,3,4 }; 这个代码中就是定义了一个数组int表示数组内的元素类型为整型arr是数组名[10]里面的10表示这个数组最多放10个元素后面花括号里面是对这个数组进行了初始化前五个元素分别初始化为了01234而剩下的5个元素会默认初始化为0。可以打开监视器来看看 数组的使用 关于数组 数组首元素的下标为0通过下标来访问数组 如果要将数组中的某个元素打印出来呢代码如下 全部打印呢 代码中我们通过一个while循环来实现打印数组中的全部内容每次打印一个元素 十、操作符 算数操作符 -    *    /    % 移位操作符 位操作符 ^    | 赋值操作符 -    *    /        ^    |        单目操作符 !                          逻辑反操作 -                          负值                          正值                          取地址 sizeof                  操作数的类型长度以字节为单位 ~                          对一个数的二进制按位取反 --                         前置、后置--                        前置、后置 *                          间接访问操作符(解引用操作符) (类型)                  强制类型转换 关系操作符 !                         用于测试“不相等”                         用于测试“相等” 逻辑操作符 逻辑与 ||                           逻辑或 条件操作符 exp1 ? exp2 : exp3 逗号表达式 exp1, exp2, exp3, …expN 下标引用、函数调用和结构成员 []     ()     .     - 这些操作符我们后面还会继续讲这里先简单了解一下 我们先来了解一下 / 这个操作符通过以下代码来体验以下 #include stdio.h int main() {printf(%d\n, 7 / 2);return 0; } 那么这段代码的运行结果是什么呢   3.5 运行结果 发现运行结果是3这是为什么呢 来分析一下C语言里面的 / 和我们平时数学中的除号还是有区别的这里是整除求商的意思7除以2本来应该是3.5但这里是整除商只有3没有5所以结果为3。那么如果我们想要得到3.5应该怎么做呢只需要让 / 两边的数字有一个是小数即可如下代码: 那么有没有哪个操作符是用来整除求余的呢肯定是有的------%取模操作符如下代码 7对2整除的余数便是1 再来看看移位操作符右移操作符 和左移操作符  请看以下代码 #include stdio.h int main() {int a 8;printf(%d\n, a 1);return 0; } 这里的a1表示将a的值向右移动一位那么移动一位到底移的是什么位呢 移的是二进制位那么我们在这里将a先写成二进制形式为1000而这里的a又是一个整型4个字节----32个比特位准确来写应该是00000000000000000000000000001000这里将a向右移动 一位我们通过下图来更深刻的理解 可以看到右移之后1的权重降低值变为4可以通过运行来验证一下 左移同样也是这样我们通过后面的博客细细道来。 位操作符 按位二进制位与 |               按位二进制位或 ^              按位二进制位异或 同样通过以下代码来体验一下 #include stdio.h int main() {int a 5;int b 3;int c a b;printf(%d\n, c);return 0; } 通过下图来理解 所以ab的结果就是1a|b为7a^b为6 再看赋值操作符 #include stdio.h int main() {int a 10;a a 3;printf(%d\n, a);return 0; } 这里a本来是10然后aa3就是给a加3之后放到a里面去a就变成了13。并且这里用a5也是同样的效果 单目操作符 前面我们看到的它就有两个操作数ab,必须有两个操作数而单目操作符就是只有一个操作数 逻辑反操作 ! ,这个操作符它只关注操作数的真假 C语言里面是如何区分真假的呢 0----表示假 非0----表示真 通过下面的代码的结果来对比一下 下一个操作符 ~ 我们先来了解一下原码反码和补码的概念 比如int a -1我们将十进制数字转化为二进制数字得到的是他的原码通过图来理解 注意 整数在内存中存的是二进制补码正整数的原码反码补码相同 以下代码 #include stdio.h int main() {int a 0;//分析//a的原码00000000000000000000000000000000//补码 00000000000000000000000000000000//按位取反 11111111111111111111111111111111//反码 11111111111111111111111111111110//原码 10000000000000000000000000000001//所以结果应该是-1printf(%d\n, ~a); } 这里再加一个小的知识 在C语言里面0分为0和-0 0 原码00000000000000000000000000000000 反码00000000000000000000000000000000 补码00000000000000000000000000000000 -0 原码10000000000000000000000000000000 反码11111111111111111111111111111111 补码10000000000000000000000000000000 自增自减操作符-- 通过以下代码来体验一下 #include stdio.h int main() {int a 0;int b a; //后置先使用a的值然后再让a加1int c 1;int d c; //前置先让c加1然后再把c的值赋给dprintf(a%d,b%d\n,a,b);printf(c%d,d%d\n, c, d); } 强制类型转换操作符 如下代码 3.14是double类型的将double类型的数据赋给int类型我们发现编译器报了一个警告 那么我们应该怎么解决呢  这个时候就可以用强制类型转换 #include stdio.h int main() {int a (int)3.14;return 0; } 关系操作符 关系操作符其实就是用来比较大小这里主要再来强调一下判断相等与不相等用的是而不是 以下情况我们可能后面稍不注意就会犯这种错误 int main() {int i 1;if (i 0){printf(hello);}return 0; } 这里会不会把hello打印出来呢   答案就是不会打印 原因if后面的条件判断用了一个赋值这里不是在判断i是不是等于0而是将0赋给i,然后i是0条件为假就不会打印应该要用 逻辑操作符 逻辑与   表示的是如果两边的值都为真那么结果为真如果其中有一个为假那么结果为假 罗技或 || 表示如果两边有一个值为真那么结果为真如果两个都为假那么结果为假 如下代码示例 int main() {int a 5;int b 3;int c 0;int d 0;printf(%d,%d\n, a b, a c);printf(%d,%d\n, a || b, d || c); } 条件操作符  这里的条件操作符有三个操作数所以也叫三目操作符。exp1 ? exp2 : exp3 含义表达式1的结果如果为真就执行表达式2如果表达式1的结果为假就执行表达式3 我们之前写代码求两个数的最大值都是通过if语句来判断现在我们完全可以通过条件操作符来计算可以极大的简化代码。 #include stdio.h {int a 5;int b 3;int max a b ? a : b;printf(%d\n, max);return 0; } 逗号表达式 逗号隔开的一串表达式。逗号表达式的结果从左向右依次计算但表达式的结果是最后一个表达式的结果 #include stdio.h int main() {int a (1 2, 2 - 3, 3 5); //表达式里面的从左到右以此计算但最终结果是最后一个表达式的结果printf(%d\n, a); //结果应该是358return 0; } 函数调用操作符 我们在每次调用函数的时候都必须要有函数调用操作符(),圆括号里面放参数来传参 十一、常见关键字 auto   break   case   char   const   continue   default   do   double   else   enum    extern    float   for   goto   if   int   long   register   return   short   signed   sizeof   static   struct    switch   typedef   union   unsigned   void   volatile   while auto关键字平时都是省略的局部变量都是自动创建自动销毁的所以C语言中的局部变量都是自动变量 auto int a10;    //这里的auto平时都是省略不写的 break       终止循环/switch case         switch语句 const        常变量 continue   继续循环 default       switch enum         枚举 extern        声明外部符号 goto           跳转不建议使用 register      寄存器关键字 static          静态 1.修饰局部变量改变的是局部变量的生命周期和程序的生命周期一样    2.修饰全局变量改变了它的作用域使这个变量只能在自己所在的源文件内部使用    3.修饰函数改变了这个函数的使用范围这个函数只能在自己所在的源文件内部使用 typedef      类型重定义 union         联合体\共用体 volatile       比较少见 这些关键字我们后面都会讲到。 注意在创建变量的时候变量名不能是关键字 十二、#define 定义常量和宏 #define定义的标识符常量 通过以下代码来了解一下 #include stdio.h #define PI 3.14 int main() {double a PI;printf(%lf\n, a); } 这里的PI就是属于标识符常量 定义宏 这里我们来写一个加法的宏来体验一下 #include stdio.h #define ADD(X,Y) ((X)(Y)) //注意这里的X和Y可能是数也有可能是表达式所以给它带上括号比较好注意和表示符常量做区分 int main() {int add ADD(1, 2);printf(%d\n, add);return 0; } 十三、指针 前言 指针这一部分可能很多人在学习的时候都觉得很难但在这里我想说的是不要自己吓自己想一想你当初刚上大学的时候可能觉得高数非常难最后学完整本书的时候回过头再看还觉得很难吗 肯定已经觉得没有那么难了那么其实指针也是这样的只要把里面的东西都搞清楚你就不觉得难了。 其实计算机在设计的时候很多东西都是参考的生活中的东西 引例 eg.我国的国土面积960万平方公里这么大的国土面积是怎么合理使用的呢聪明的国家领导人就想到将这一大块区域进行划分先划分为各个省每个省再划分为各个市区市区又划分为县城县划分为镇镇又划分为村每个村的每户人家都有门牌号可以很方便的找到这样就对这样一大块区域进行了很好的管理。 那么其实电脑的设计也是这样的在学C语言的这个阶段我们常说的计算机的内存划分为3部分栈区堆区和静态区。 计算机在最终也是将内存划分为了很小的空间--内存单元。 我们平时要在学校找一个同学也是先确定他的宿舍编号然后才去找的不可能盲目的去找而这里宿舍编号就是地址。 那在计算机内存中我们想要找到某个内存单元也是要知道它的编号呀所以这里就对每个内存单元都进行了编号处理将编号就称为内存单元的地址。 那么问题又来了 计算机是怎么对内存单元编号的呢 1.计算机中的32位或者62位 32位的机器它是有32根地址线32根物理的电线通电之后会将电信号转换成数字信号正电--1负电--032根地址线通电之后会产生以下的二进制序列数字信号 0000000000000000000000000000000032位 00000000000000000000000000000001 00000000000000000000000000000010 ……………………………………………… 11111111111111111111111111111111 这个时候呢将二进制序列与内存单元一一对应那么与内存单元相对应的二进制序列就是它的编号--地址。  2.每一个内存单元到底多大 这个我们也是可以来计算一下 比如一个内存单元是1bit那么32位机器的所产生的序列共计2^32个即2^32bit转化为MB就是512MB要想想我们买的计算机都是起步2G/4G,所以内存单元以bit为单位肯定是不行的。在C语言中我们创建一个变量所申请的空间最小都是char--1byte,所以其实内存单元单位其实是字节。 请看如下代码 int main() {int a 10; //创建变量a向内存申请4个字节的空间将10存储进去return 0; } 内存空间的地址如何得到 我们创建了变量a如何得到它的地址呢  我们只需要在a的前面加上  取地址操作符 符号便可以得到它的空间地址 int main() {int a 10; //创建变量a向内存申请4个字节的空间将10存储进去printf(%p\n, a); //%p--打印地址16进制return 0; } 我们可以把打印出来的地址00EFF6E8(16进制)转化成二进制来看看1110 1111 1111 0110 1110 1000 想存地址怎么办 我们平时可以创建字符变量来存字符创建整型变量来存整型那如果想将地址存起来呢那我们就得创建一个指针变量----用来存放地址 int main() {int a 10; //创建变量a向内存申请4个字节的空间将10存储进去int* p a; //a取出a的地址创建指针变量p,接收a的地址return 0; } * 说明p是指针变量前面的int说明p指向的是整型变量  指针变量p里面存放的就是a的地址我们可以通过p里面所存储的值地址来找到变量a的内存空间所以我们就说p指向了a所以将p形象的称为指针注意变量名字是p不是*p 那么我们以后想要存储地址的时候就可以用指针 int main() {float b 2.5;float* p b;return 0; } 本质目的不是为了存地址 我们创建指针存放变量地址的本质目的并不是为了存放变量的地址而是为了将来能够通过地址来找到这个变量的内存空间使用它。 我们上面已经存放了a的地址在p里面那么我们怎么找到a呢 int main() {int a 10; int* p a; *p 20; //这里*---解引用操作符return 0; }这里的 * --解引用操作符间接访问操作符p里面存的是a的地址那么*p就是通过地址来找到a 指针变量的大小 指针的空间用来存放地址那么指针变量的空间到底多大 之前我们说在32位平台32根地址线产生的二进制序列就是32位32bit4byte,所以我们只需要4个字节的空间就可以存储地址了。 所以 32位平台----地址大小为4个字节----指针变量大小也是4个字节 64为平台----地址大小为8个字节----指针变量大小就是8个字节 我们也可以再用之前学过的sizeof来计算一下它的大小 int main() {int a 10; char b n;int* p a; char* pb b;printf(%d\n, sizeof(p));printf(%d\n, sizeof(pb));return 0; } 十四、结构体 为什么会有结构体呢 我们前面所学到的那些数据类型char,int,double,还有指针都是不足以去表达对象如果我们要去表示一个人能用一个数字去表示吗肯定是不行的要知道人是属于复杂对象不能简单的用某个数来表示要表示一个人需要很多方面比如姓名性别年龄等。要表人我们就得创造一种复杂类型C语言里面就有了结构体类型 结构体是C语言中特别重要的知识点结构体使得C语言有能力描述复杂类型 创建结构体 结构体关键字struct 那现在我们用结构体来创建一个描述人的类型 //结构体 struct Peo //创建struct Peo这种结构体类型 {char name[30]; //姓名short age; //年龄 }; //注意加分号 int main() {struct Peo p { 牛逼plus,18 }; //利用struct Peo这种结构体类型创建结构体变量pprintf(%s\n %d\n, p.name, p.age);return 0; } 这段代码呢就是创建结构体类型struct Peo,然后利用struct Peo这个结构体类型创建了结构体变量p并给它赋初值在printf函数中p.name中的 . 就是结构体成员访问操作符 运行结果: 前面我们学习了指针那如果用指针存这个结构体变量的地址并通过指针来访问呢 1.这里的 * 说明ps是一个指针变量前面的struct Peo说明ps指向的是struct Peo这种结构体类型 2.printf函数中 - 是通过指针来访问结构体成员时的操作符  .         结构体对象.结构体成员  -        结构体指针-结构体成员 -------------------------------------------------------------------------------- -------------------------初识C语言到此完结----------------------------- 关于C语言每个知识点后面都会单独写博客更加详细的介绍 欢迎大家关注 一起学习交流  让我们将编程进行到底
http://www.lakalapos1.cn/news/21380/

相关文章:

  • 青岛网站域名备案长治做网站的公司
  • seo按照搜索引擎的什么对网站html网页制作代码大全期末
  • 哈尔滨模板网站怎么在网上做广告宣传
  • 网站经常出现502做热区的网站
  • 做网站没有按照合同履行wordpress登陆失败
  • 微信红包封面开放平台百度关键词seo排名
  • 昆明建设公司网站临沧网站建设
  • 外包网站建设多少钱uc wordpress
  • 合工大网站建设试卷wordpress 协同
  • 网站开发+搜索被网站开发公司坑
  • 网站群如何做网站广告投放效果
  • 网站开发需求分析说明成都装修网站建设
  • 网站建设公司推荐乐云seo网站建设开票是几个点
  • 公司网站要什么做wordpress 使用自己的表
  • 如何做攻击类型网站我的百度网盘登录入口
  • 黄山建设网站网站建设公司行业现状
  • 网站优化公司认准乐云seo如何设计商务网站
  • 海口网站建设q.479185700惠wordpress 文章访问次数
  • 自己做游戏的网站东莞seo排名收费
  • 电子商务网站的建设过程北京做网站youyi51
  • 重庆网站建设套餐篇高端网站愿建设
  • 怎样可以有自己的网站wordpress自动更新文章
  • 哪些网站是做食品wordpress感兴趣推送
  • 公司招聘做哪家网站白沙网站建设的目标
  • 抚顺地区网站建设2021小说排行榜百度风云榜
  • 毕业设计网站建设体会什么网站比较好
  • 公司网站开发费计入外贸营销邮件范文
  • wordpress 3.2.1做模板网站推荐乐云seo
  • 湖南住房城乡建设部网站网站建设费计入无形资产
  • 上海网站建设v芯ee8888e为什么电子网站开发