C语言学习笔记

丹尼斯里奇和另一个我不记得名字的大神想要在UNIX系统上玩个小游戏,并因为大型机不方便,想在小型机上自己写一个系统,先将BCPL简化为 B语言,又经过改进,诞生了早期的C语言,所以C语言的历史其实也就是UNIX的历史。(如今的MAC OS,LINUX,ANDROID都是基于UNIX系统,第一个高级语言是FORTRAN,没有A语言)
所以只要计算机体系结构不变,C语言就经久不衰

计算机语言

计算机语言上描述要求它如何做事情的过程和方法
汇编语言、低级语言:面向机器,贴近计算机。
高级语言:任何型号的计算机都适用,有基于过程的结构化和非结构化语言,也有面向对象语言。(C语言是完全模块化和结构化的语言)
解释语言,编译语言:执行方式不同,目前性能也已不再是问题。

程序设计

程序结构

预处理指令 #include<>
全局声明
函数定义,从main函数开始执行

运行步骤

1,输入程序代码,生成.c文件-源程序文件
2,编译,预处理获取头文件,检查语法错误,将源程序转换为二进制的目标程序,生成.obj文件
3,连接处理,一次编译得到一个obj文件,只是程序的一部分,需要把边以后得到的所有文件和模块装配起来再与函数库相连生成.exe文件-可执行程序

程序设计的一般流程

首先我们要搞明白什么是程序,程序=算法+数据结构,其中算法是对操作的描述,数据结构是对数据的描述。
程序设计的一般流程如下:
问题分析->设计算法->编写程序->对源程序进行编辑,编译和连接->运行程序,分析结果

一些知识

运算符

运算优先级

\\关系运算符优先级比算术运算低
()
!,+,-,++,--作为单目运算符
*,\,%
+,-
<,<=,>,>=
==,!=
&&,||
? :三目运算符,条件?满足:不满足,高于赋值运算符,低于其他运算符
=,*=,+=等
,逗号运算符,连接两个表达式,用右边的作为结果

逻辑运算由左至右,左边可以确定运算结果的右边不计算,比如&&运算已知左为0,右边的表达式不会被计算,我们称之为“短路”,需要注意。
++,-- 递增递减对应机器指令中的INC和DEC,在C诞生之初可以加快运算,但如今已失去意义,+=,-=,*=,=同理,C在诞生之初就是要表示所有的机器指令,因此才有上述表达式,如今都可以算做糟粕。

程序结构

基于过程的三大结构——顺序,选择和循环结构,if嵌套,while(条件)满足就做,for(i;i<n;i++)已知循环次数使用,都没啥说的,用的少的switch注意一下,语句从case进入后,顺序执行,所以需要写break跳出。

函数,数组,地址

函数写在后面需要提前声明,一个函数一个返回值;调用值与函数规定的不匹配时会自动转换,但会导致很多不可知的问题。数组初始化必须限定好个数,动态需要借助指针——int *a=(int*)malloc(n*sizeof(int))指针指向开辟的内存,C99之前需要这么操作,现在的可以用new,int *a=new int[n]地址用于解决函数参数值传递时只有一个返回值的问题,通过地址传递指针变量可以一次修改多个变量的值,达到返回多个值的目的;以及大量数据需要做参数时(比如数组);还有上面提到动态申请内存时的应用;与数组的关系,数组名就是指向第一个数据的地址,但数组初始化后不可使用a[]的方式修改,因为int a[]=int* const a与字符串char *s表示指向char的指针变量,可以当做string使用,但是更宽泛,同样的char s[]也是此效果,但一般的,处理时我们使用char *s,构造时我们使用char s[]

写在后面

通过课程学习和目前的接触,C++现在都早已不是主流,C的应用则更少,目前多应用于操作系统,嵌入式,驱动程序,引擎,底层驱动和一些工业场景,日常较少使用,使用他编写代码也少了些乐趣,更需要我们不断学习。
但是我们为什么还要学C呢,就是因为他的历史悠久,目前的语言大多是Clike的,也就是语法接近C,可以说是C的简化版,我们学了C以后再转到其他语言就能更游刃有余,所谓求其上者得其中。
此外C还有啥优点呢?直接对内存操作,说是更自由,但是需要很高的门槛,还容易导致溢出等问题;开发者面对过多底层逻辑,开发效率低,总得就是没啥好用也,人生苦短呀。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/149186.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【MySql】3- 实践篇(一)

文章目录 1. 普通索引和唯一索引的选择1.1 查询过程1.2 更新过程1.2.1 change buffer1.2.2 change buffer 的使用场景 1.3 索引选择和实践1.4 change buffer 和 redo log2. MySQL为何有时会选错索引?2.1 优化器的逻辑2.1.1 扫描行数是怎么判断的?2.1.2 重新统计索引信息 2.2 …

C语言中柔性数组的讲解与柔性数组的优势

前言:也许你从来没有听说过柔性数组&#xff08;flexible array&#xff09;这个概念&#xff0c;但是它确实是存在的。C99 中&#xff0c;结构中的最后一个元素允许是未知大小的数组&#xff0c;这就叫做"柔性数组"成员。 目录标题 柔性数组什么是柔性数组呢&#…

【C语言】八大排序算法

文章目录 一、冒泡排序1、定义2、思想及图解3、代码 二、快速排序1、hoare版本2、挖坑法3、前后指针法4、非递归快排5、快速排序优化1&#xff09;三数取中选key值2&#xff09;小区间优化 三、直接插入排序1、定义2、代码 四、希尔排序1、定义2、图解3、代码 五、选择排序1、排…

sheng的学习笔记-【中文】【吴恩达课后测验】Course 2 - 改善深层神经网络 - 第二周测验

课程2_第2周_测验题 目录&#xff1a;目录 第一题 1.当输入从第8个mini-batch的第7个的例子的时候&#xff0c;你会用哪种符号表示第3层的激活&#xff1f; A. 【  】 a [ 3 ] { 8 } ( 7 ) a^{[3]\{8\}(7)} a[3]{8}(7) B. 【  】 a [ 8 ] { 7 } ( 3 ) a^{[8]\{7\}(3)} a…

代码随想录 Day11 二叉树 LeetCode T144,145,94 前中后序遍历 (递归解法)

题解及更详细解答来自于:代码随想录 (programmercarl.com) 前言: 递归三要素 确定递归函数的参数和返回值&#xff1a; 确定哪些参数是递归的过程中需要处理的&#xff0c;那么就在递归函数里加上这个参数&#xff0c; 并且还要明确每次递归的返回值是什么进而确定递归函数的返…

【Redis】基础数据结构-skiplist跳跃表

有序集合Sorted Set zadd zadd用于向集合中添加元素并且可以设置分值&#xff0c;比如添加三门编程语言&#xff0c;分值分别为1、2、3&#xff1a; 127.0.0.1:6379> zadd language 1 java (integer) 1 127.0.0.1:6379> zadd language 2 c (integer) 1 127.0.0.1:6379…

【Java-LangChain:使用 ChatGPT API 搭建系统-2】语言模型,提问范式与 Token

第二章 语言模型&#xff0c;提问范式与 Token 在本章中&#xff0c;我们将和您分享大型语言模型&#xff08;LLM&#xff09;的工作原理、训练方式以及分词器&#xff08;tokenizer&#xff09;等细节对 LLM 输出的影响。我们还将介绍 LLM 的提问范式&#xff08;chat format…

【图像处理】使用各向异性滤波器和分割图像处理从MRI图像检测脑肿瘤(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

实验3.2 分期付款计算器

目录 实验目的‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬ 实验内容‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬…

20231005使用ffmpeg旋转MP4视频

20231005使用ffmpeg旋转MP4视频 2023/10/5 12:21 百度搜搜&#xff1a;ffmpeg 旋转90度 https://zhuanlan.zhihu.com/p/637790915 【FFmpeg实战】FFMPEG常用命令行 https://blog.csdn.net/weixin_37515325/article/details/127817057 FFMPEG常用命令行 5.视频旋转 顺时针旋转…

python爬虫基于管道持久化存储操作

文章目录 基于管道持久化存储操作scrapy的使用步骤1.先转到想创建工程的目录下&#xff1a;cd ...2.创建一个工程3.创建之后要转到工程目录下4.在spiders子目录中创建一个爬虫文件5.执行工程setting文件中的参数 基于管道持久化存储的步骤&#xff1a;持久化存储1&#xff1a;保…

集合(容器)-List接口及实现类

容器的特征&#xff1a;①数据长度可变&#xff1b;②数据保存方式不同。 集合体系概述&#xff1a;JAVA的集合框架是由很多接口、抽象类、具体类组成。都位于java.util包中。 Java中集合类中默认可以存储任意数据类型&#xff0c;Java中的集合提供泛型机制&#xff0c;在定义…

李沐深度学习记录3:11模型选择、欠拟合和过拟合

通过多项式拟合探索欠拟合与过拟合 import math import numpy as np import torch from torch import nn from d2l import torch as d2l#生成数据集 max_degree 20 # 多项式的最大阶数 n_train, n_test 100, 100 # 训练和测试数据集大小 true_w np.zeros(max_degree) # …

园林园艺服务经营小程序商城的作用是什么

园林园艺属于高单价服务&#xff0c;同时还有各种衍生服务&#xff0c;对企业来说&#xff0c;多数情况下都是线下生意拓展及合作等&#xff0c;但其实线上也有一定深度&#xff0c;如服务售卖或园艺产品售卖等。 基于线上发展可以增强获客引流、品牌传播、产品销售经营、会员…

很普通的四非生,保研破局经验贴

推免之路 个人情况简介夏令营深圳大学情况机试面试结果 预推免湖南师范大学面试结果 安徽大学面试结果 北京科技大学笔试面试结果 合肥工业大学南京航空航天大学面试结果 暨南大学东北大学 最终结果一些建议写在后面 个人情况简介 教育水平&#xff1a;某中医药院校的医学信息…

STL-stack、queue和priority_queue的模拟实现

目录 一、容器适配器 &#xff08;一&#xff09;什么是适配器 &#xff08;二&#xff09;stack和queue的底层结构 二、Stack 三、queue 四、deque双端队列 &#xff08;一&#xff09;优点 &#xff08;二&#xff09;缺陷 五、优先级队列 &#xff08;一&#xff…

成都建筑模板批发市场在哪?

成都作为中国西南地区的重要城市&#xff0c;建筑业蓬勃发展&#xff0c;建筑模板作为建筑施工的重要材料之一&#xff0c;在成都也有着广泛的需求。如果您正在寻找成都的建筑模板批发市场&#xff0c;广西贵港市能强优品木业有限公司是一家值得关注的供应商。广西贵港市能强优…

华为云云耀云服务器L实例评测|Ubuntu云锁防火墙安装搭建使用

华为云云耀云服务器L实例评测&#xff5c;Ubuntu安装云锁防火墙对抗服务器入侵和网络攻击 1.前言概述 华为云耀云服务器L实例是新一代开箱即用、面向中小企业和开发者打造的全新轻量应用云服务器。多种产品规格&#xff0c;满足您对成本、性能及技术创新的诉求。云耀云服务器L…

基于阴阳对优化的BP神经网络(分类应用) - 附代码

基于阴阳对优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于阴阳对优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.阴阳对优化BP神经网络3.1 BP神经网络参数设置3.2 阴阳对算法应用 4.测试结果&#x…

数据结构与算法--算法

这里写目录标题 线性表顺序表链表插入删除算法 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 线性表 顺序表 链表 插入删除算法 步骤 1.通过循环到达指定位置的前一个位置 2.新建…