程序由什么构成?

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的更多相关文章

  1. 驱动开发学习笔记. 0.06 嵌入式linux视频开发之预备知识

    驱动开发读书笔记. 0.06  嵌入式linux视频开发之预备知识 由于毕业设计选择了嵌入式linux视频开发相关的项目,于是找了相关的资料,下面是一下预备知识 UVC : UVC,全称为:USB v ...

  2. 受限玻尔兹曼机(RBM)学习笔记(一)预备知识

    去年 6 月份写的博文<Yusuke Sugomori 的 C 语言 Deep Learning 程序解读>是囫囵吞枣地读完一个关于 DBN 算法的开源代码后的笔记,当时对其中涉及的算法原 ...

  3. 学习Identity Server 4的预备知识

    我要使用asp.net core 2.0 web api 搭建一个基础框架并立即应用于一个实际的项目中去. 这里需要使用identity server 4 做单点登陆. 下面就简单学习一下相关的预备知 ...

  4. JAVA面向对象-----面向对象(基础预备知识汇总)

    终于整理好了面向对象基础预备知识,但是有点多,所以你们懂的,贴图,较长的代码我还是会排版出来的,我不想把时间浪费在排版上在word里排版一次已经很浪费时间了,所以请谅解. public class C ...

  5. 用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识 (2) + 准备项目

    上一部分预备知识在这 http://www.cnblogs.com/cgzl/p/9010978.html 如果您对ASP.NET Core很了解的话,可以不看本文, 本文基本都是官方文档的内容. A ...

  6. ASP.NET Core的实时库: SignalR -- 预备知识

    大纲 本系列会分为2-3篇文章. 第一篇介绍SignalR的预备知识和原理 然后会介绍SignalR和如何在ASP.NET Core里使用SignalR. 本文的目录如下: 实时Web简述 Long ...

  7. 学习Identity Server 4的预备知识 (误删, 重补)

    我要使用asp.net core 2.0 web api 搭建一个基础框架并立即应用于一个实际的项目中去. 这里需要使用identity server 4 做单点登陆. 下面就简单学习一下相关的预备知 ...

  8. LDA-线性判别分析(一)预备知识

    本来是要调研 Latent Dirichlet Allocation 的那个 LDA 的, 没想到查到很多关于 Linear Discriminant Analysis 这个 LDA 的资料.初步看了 ...

  9. IP地址和子网划分学习笔记之《预备知识:进制计数》

    一.序:IP地址和子网划分学习笔记开篇 只要记住你的名字,不管你在世界的哪个地方,我一定会去见你.——新海诚 电影<你的名字> 在我们的日常生活中,每个人的名字对应一个唯一的身(敏)份(感 ...

随机推荐

  1. 【MySQL作业】多表连接查询——美和易思多表连接查询应用习题

    点击打开所使用到的数据库>>> 1.获取订单 ID 为 4 的订购明细信息,要求输出商品名.单价和件数. 连接三张表:订单表.订单明细表和商品表. select goodsName ...

  2. JS 数组的基本使用和案例

    知识点汇总: 数组:就是一组数据的集合,存储在单个变量的方式 自变量创建数组 var 数组名字 = ['a','b'] // []里面的是数据的元素,可为任意字符类型 利用new创建数组 var 数组 ...

  3. centos 内存使用情况+负载使用情况

    内存使用情况,查看内存 free -h #查看内存 available:  可用内存 buff/cache:   缓存内存 free:   空闲内存 used: 已使用内存 负载使用情况 cat /p ...

  4. Go语言命名规范

    一.变量命名规范 变量命名一般采用驼峰式,当遇到特有名词(缩写或简称,如DNS)的时候,特有名词根据是否私有全部大写或小写.例子: var apiClient var URLString 二.常量命名 ...

  5. vue js格式化数字为金额格式

    /** * @description 格式化金额 * @param number:要格式化的数字 * @param decimals:保留几位小数 默认0位 * @param decPoint:小数点 ...

  6. GoLang设计模式19 - 桥接模式

    桥接模式是一种结构型设计模式,通过桥接模式可以将抽象部分和它的实现部分分离.这看着有点儿奇怪,接下来会作详细说明. 桥接模式建议将一个较大的类拆分成两中角色. 抽象角色 - 抽象角色是一个接口.它的子 ...

  7. 信不信由你!iPhone6屏幕宽度不一定是375px,iPhone6 Plus屏幕宽度不一定是414px

    看到这个题目你可能不信,引出这个问题的缘由是几次项目中Chrome模拟器和iPhone6真机预览效果不一致. 为什么在Chrome Emulation模拟手机页面和真机预览效果不一致? 以前觉得不外乎 ...

  8. 移动端调试 - UC浏览器开发者版 - WIFI

    Chrome  功能特性 支持PC或Pad设备,实时调试手机网页 DOM.CSS.JS调试 多功能面板满足多种调试需求 1   准备工作 保证手机与PC处于同一个无线网段. 下载Android平台的U ...

  9. F5 BIG-IP 远程代码执行漏洞环境搭建

    最近F5设备里的远程代码执行漏洞可谓是火爆,漏洞评分10分,所以,我也想搭建下环境复现一下该漏洞 漏洞详情 F5 BIG-IP 是美国F5公司一款集成流量管理.DNS.出入站规则.web应用防火墙.w ...

  10. R语言:关于rJava包的安装

    R语言:关于rJava包的安装  盐池里的萝卜 2014-09-14 00:53:33 在做文本挖掘的时候,会发现分词时候rJava是必须要迈过去的坎儿,所以进行了总结: 第一步:安装rJava和jd ...