C预备知识_001
程序由什么构成?
1、对数据的描述;在程序中要指定用到哪些数据以及这些数据的类型和数据的组织形式,其实这就是数据结构(data structure)。
2、对操作的描述;即要求计算机就行操作的步骤,也就是算法(algorithm)。
数据是操作的对象,操作的目的是对数据进行加工处理,来得到期望的结果。
作为程序设计人员,必须认真考虑和设计数据结构和设计操作步骤(即算法)。
著名计算机科学家沃思(Nikiklous Wirth)提出了一个公式:
算法 + 数据结构 = 程序
知道今天,这个公式对于过程化程序来说仍然是适用的。
——摘自《C程序设计 第四版》谭浩强
不要认为只有“计算”的问题才有算法。广义地讲,为了解决问题而采取的方法和步骤,就称为“算法”。例如,描述太极拳动作的图解,就是“太极拳的算法”。
计算机算法分为两类:数值运算算法和非数值运算算法。
算法的特性:有穷性、确定性、0个或多个输入、1个或多个输出、有效性
结构化程序设计方法的基本思路:
1、自顶向下
2、逐步细化
3、模块化设计
4、结构化编码
3、结构体的长度是多少很复杂
因为它涉及到字符填充和机器字对齐。
4、指针变量大小就是4字节
1 char * p1;
2
3 int * p2;
4
5 float * p3;
6
7 double * p4;
8
9 std::cout<<sizeof(p1)<<endl<<sizeof(p2)<<endl<<sizeof(p3)<<endl<<sizeof(p4)<<endl;
输出:
4
4
4
4
1 char * p1;
2
3 int * p2;
4
5 float * p3;
6
7 double * p4;
8
9 std::cout<<sizeof(p1)<<endl<<sizeof(p2)<<endl<<sizeof(p3)<<endl<<sizeof(p4)<<endl;
输出:
1
4
4
8
注意:指针变量为啥只占4字节,因为这里的地址最大只需要4字节即可表示。而且这取决于编译器,32位的编译器指针变量占4byte,64位的编译器指针变量就占8byte。
5、变量名跟指针的区别
往下看之前,你要带着问题看,通过函数改变一个变量,我们是选择方法一、还是方法二、方法三,好处是啥?为啥要这样选?
方法一:
1 # include <iostream>
2
3 using namespace std;
4
5 void change(int);
6
7 int main(int argc, char const *argv[])
8 {
9 int m = 6;
10
11 change(m);
12
13 cout<<m<<endl;
14
15 return 0;
16 }
17
18 void change(int n)
19 {
20 n = 7;
21 }
输出:6
这样的输出结果是不是让你大吃所惊呢?明明改变了m的值,为啥最后是没有呢?
补充:开始我觉得大家通过后面的例子应该能明白,使用了函数change()后为啥没有改变m的值。发表完我觉得我还是再啰嗦一下。
首先我们定义了一个变量 int m = 5;
当我们调用函数change()时,定义了另一个变量 int n; 然后使用 change(m); 就是把m的值赋给n,即&n指向了m的地址,然后就没有m的事了,后来你改变的是变量n,跟变量m没一毛钱关系。
其实你所理解的应该是这样的
方法二:
1 # include <iostream>
2
3 using namespace std;
4
5 int change(int);
6
7 int main(int argc, char const *argv[])
8 {
9 int m = 6;
10
11 m = change(m);
12
13 cout<<m<<endl;
14
15 return 0;
16 }
17
18 int change(int n)
19 {
20 n = 7;
21
22 return n;
23 }
输出:7
但是你还可以这样:用指针传参
方法三:
1 # include <iostream>
2
3 using namespace std;
4
5 void change(int *);
6
7 int main(int argc, char const *argv[])
8 {
9 int m = 6;
10
11 change(&m);
12
13 cout<<m<<endl;
14
15 return 0;
16 }
17
18 void change(int * n)
19 {
20 * n = 7;
21 }
输出:7
现在知道指针的魅力了吧,它能改变数值啊。
看完了这三种方法,你能回答上面的问题吗?
很明显方法一不能用,因为它达不到所要的效果。
那么就剩下方法二跟方法三待选了?
选择方法三,假如m不是一个简单数据类型而是一个结构体类型。使用方法三有如下优点:
(这也是指针的优点)
①可以快速的更改数据
②耗用内存小(因为指针变量只占4byte)
③执行速度快
C预备知识_001的更多相关文章
- 驱动开发学习笔记. 0.06 嵌入式linux视频开发之预备知识
驱动开发读书笔记. 0.06 嵌入式linux视频开发之预备知识 由于毕业设计选择了嵌入式linux视频开发相关的项目,于是找了相关的资料,下面是一下预备知识 UVC : UVC,全称为:USB v ...
- 受限玻尔兹曼机(RBM)学习笔记(一)预备知识
去年 6 月份写的博文<Yusuke Sugomori 的 C 语言 Deep Learning 程序解读>是囫囵吞枣地读完一个关于 DBN 算法的开源代码后的笔记,当时对其中涉及的算法原 ...
- 学习Identity Server 4的预备知识
我要使用asp.net core 2.0 web api 搭建一个基础框架并立即应用于一个实际的项目中去. 这里需要使用identity server 4 做单点登陆. 下面就简单学习一下相关的预备知 ...
- JAVA面向对象-----面向对象(基础预备知识汇总)
终于整理好了面向对象基础预备知识,但是有点多,所以你们懂的,贴图,较长的代码我还是会排版出来的,我不想把时间浪费在排版上在word里排版一次已经很浪费时间了,所以请谅解. public class C ...
- 用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识 (2) + 准备项目
上一部分预备知识在这 http://www.cnblogs.com/cgzl/p/9010978.html 如果您对ASP.NET Core很了解的话,可以不看本文, 本文基本都是官方文档的内容. A ...
- ASP.NET Core的实时库: SignalR -- 预备知识
大纲 本系列会分为2-3篇文章. 第一篇介绍SignalR的预备知识和原理 然后会介绍SignalR和如何在ASP.NET Core里使用SignalR. 本文的目录如下: 实时Web简述 Long ...
- 学习Identity Server 4的预备知识 (误删, 重补)
我要使用asp.net core 2.0 web api 搭建一个基础框架并立即应用于一个实际的项目中去. 这里需要使用identity server 4 做单点登陆. 下面就简单学习一下相关的预备知 ...
- LDA-线性判别分析(一)预备知识
本来是要调研 Latent Dirichlet Allocation 的那个 LDA 的, 没想到查到很多关于 Linear Discriminant Analysis 这个 LDA 的资料.初步看了 ...
- IP地址和子网划分学习笔记之《预备知识:进制计数》
一.序:IP地址和子网划分学习笔记开篇 只要记住你的名字,不管你在世界的哪个地方,我一定会去见你.——新海诚 电影<你的名字> 在我们的日常生活中,每个人的名字对应一个唯一的身(敏)份(感 ...
随机推荐
- UML的定义和组成详细介绍
目录 1.UML 1.1概述 1.2 UML是一种建模语言 1.3 UML语言包含三方面 2.UML支持软件体系结构建模 2.1 逻辑视图 2.2 实现(开发)视图 2.3 部署视图 2.4 过程视图 ...
- Oracle中的基本数据类型
一.Oracle 基本数据类型 1.字符数据类型 CHAR:存储固定长度的字符串,如果没有指定长度,默认为1个字节,如果数据长度没有达到指定的长度,则通过填充空格的方式来使其达到定义的长度(CHAR类 ...
- centos6.5-svn搭建文档
下载相关软件 wget http://subversion.tigris.org/downloads/subversion-1.6.6.tar.gz wget http://subversion.ti ...
- html基础 表单标签 input系列 以及优化方法
场景:在网页中显示手机用户信息的表单效果. 如:登录页.注册页标签名:input 用法是通过改变type属性值,来展示不同效果 1.1 html 代码 <!--placeholder 提示符又叫 ...
- linux 三剑客(持续更新)排版后续再说,边学边记笔记
切记:seq命令用于产生从某个数到另外一个数之间的所有整数.sed才是处理文本的命令 在遇到扩展符号时,需要添加特定参数,| () +[] 为扩展符号时,必须添加参数 egrep/grep -E s ...
- BrowserSync 本地服务器的起用
最简单粗暴的方法:进入项目根目录,执行命令browser-sync start --server --files "**" 监听所有
- Python常用功能函数总结系列
Python常用功能函数系列总结(一) 常用函数一:获取指定文件夹内所有文件 常用函数二:文件合并 常用函数三:将文件按时间划分 常用函数四:数据去重 Python常用功能函数系列总结(二) 常用函数 ...
- PowerPoint2010实现折线图动态展示
原文链接:https://www.toutiao.com/i6797629648881582596/ 我们经常会制作折线图表来表达一个过程的趋势变化,而如果让折线图动起来,会更加的生动.接下来我们将一 ...
- C# 10分钟完成百度翻译(机器翻译)——入门篇
我们之前基于百度ai开发平台实现了人脸识别 [1].文字识别 [2].语音识别 [3] 与合成的入门和进阶,今天我们来实现百度翻译的实现. 随着"一带一路"政策的开展,各种项目迎接 ...
- 服务器表单字符串转化Vue表单挂在到对应DOM节点
今天在项目开发中,遇到从后端返回的vue文件(包含template,js,css)的文件,试过用v-html解析文件,渲染到页面,但是无法渲染,后来去查了一堆资料,自己写了一个全局方法来解析这类文件 ...