首页 > 其他分享 >学习记录:第三周day03笔记

学习记录:第三周day03笔记

时间:2023-04-18 10:46:07浏览次数:44  
标签:函数 day03 联系人 第三周 笔记 参数 SWAP 预处理 define

通讯录项目:

姓名、性别、电话,最多存储50个联系人

功能:

1、添加新联系人

2、按名字删除联系人

3、按名字修改联系人

4、查找联系人,名字或电话,支持模糊查询

5、显示所有联系人信息

6、退出系统

 

 

预处理指令:

程序员所编写的代码不能被真正的编译器所编译,需要先经过一段程序翻译一下

翻译的过程称为预处理,负责翻译的程序称为预处理器,被翻译的语句叫做预处理指令,以#号开头的都是

 

预处理指令的分类:

#include 头文件导入(拷贝)

#include<> 从系统指定路径查找头文件

#include"" 从当前工作路径路径查找,找不到再从系统指定路径查找

-I path 指定要查找的路径path

还可以通过设置环境变量来指定路径

 

#define 定义宏

宏常量:

#define MAX 50(没有;结尾,否则会把;一起当作替换内容)

优点:提高代码的可扩展性、提高可读性、提高了安全性(全局变量可以被修改)、还可以和case配合

注意:一般宏名全部大写与全局变量、局部变量区别

预定义好的宏常量:

_ _func _ _ 获取函数名

_ _FILE _ _ 获取所在文件名

_ _LINE _ _ 获取所在行号

_ _DATE _ _ 获取日期

_ _TIME _ _ 获取时间

宏函数:

是带参数的宏,不是真正意义的函数,没有发生传参,也没有返回值,也不会去检查参数的类型

#define SUM(a,b) a+b

1、先把在代码中出现宏函数的位置,替换成宏函数后面的语句

2、在把代码中使用的参数替换成调用者的参数

注意:宏的内容必须保证在同一行,如果要换行,要在每一行的末尾添加续行符\

宏函数的二义性:

由于宏函数代码位置、附近的值、参数各种原因的影响,会导致宏函数由不同的解释,这叫做宏的二义性

如何避免宏的二义性?

每个参数都加小括号,整体也加小括号,不要再宏函数的参数中使用自变运算符

 

作业:实现一个交换两个变量的值的宏函数,尽可能通用,能写几个,分析每一种的优劣

#define SWAP(a,b) {a=a+b; b=a-b; a=a-b;} 有数据溢出的风险,不适合结构体

#define SWAP(a,b) {a=a^b; b=a^b; a=a^b;} 无溢出风险,只能交换整数,不能自己交换自己

#define SWAP(a,b) {long double t=a; a=b;b=t;} 不适合结构体

#define SWAP(a,b,type) {type t=a; a=b; b=t;} 可以交换结构体,多一个参数

#define SWAP(a,b) {typeof(a) (t)=(a); (a)=(b); (b)=(t);} typeof只能在GNU编译器使用

 

预处理指令

#define

常见笔试面试题

1、简述#define与typedef的区别

首先,两种定义...

如果是普通类型,它们在功能上无任何区别,但本质不同,一个是代码替换,一个是类型重定义

对于指针类型,它们的功能由较大区别

#define INTP int*

INT p1,p2,p3 //p1是指针 p2 p3是int

typedef int* INTP;

INTP p1,p2,p3; //p1 p2 p3都是指针

 

2、宏函数与普通函数的区别

是什么?

普通函数:一段具有某项功能的代码集合,会被编译成二进制指令存储在代码段中,函数名就是它的首地址,有独立的栈内存

宏函数:带参数的宏替换,不是真正的函数,只是用起来像函数,没有独立的栈内存

区别?

是带参数的宏,不是真正意义的函数,没有发生传参,也没有返回值,也不会去检查参数的类型

函数: 返回值、类型检查、安全、入栈出栈调用、跳转、速度慢

宏函数:运行结果、通用、危险、替换、冗余、速度快

标签:函数,day03,联系人,第三周,笔记,参数,SWAP,预处理,define
From: https://www.cnblogs.com/-xdj/p/17241395.html

相关文章

  • 学习记录:第三周day02笔记
    一、字符串字符:人能看懂的符号或图案,在内存中以整数形式存储,根据ASCII码表中的对应关系显示相应的符号或图案'\0'0空字符'0'48'A'65'a'97串:是一种数据结构,存储类型相同的若干个数据;对于串型结构的处理是批量性的,会从头开始直到遇到结束标志 voidshow_arr(int......
  • vue 课堂笔记
    1、----数组合并----说明:定义两个数组arr1和arr2,然后把这两个合并放入arr3中;constarr1=[1,2,3,4,5]    constarr2=[6,7,8,9] //合并数组   constarr3=[...arr1,...arr2]//转字符串以逗号分割   constarr4=arr3.join(',')   ......
  • performance_schema 笔记(二)——配置详解
    提前预警:这一篇巨长。。。做好心理准备。。。删除了书里重复说明和过于复杂的一些解释,完整版请参考原书《MySQL性能优化金字塔法则》 零、基本概念instruments:生产者,用于采集MySQL中各种各样的操作产生的事件信息,可以称为监控采集配置项consumers:消费者,用于存储来自instruments......
  • performance_schema 笔记(一)—— 简介与快速入门
    系列文章参考自《MySQL性能优化金字塔法则》,删除了书里重复说明和过于复杂的一些解释,完整版请参考原书。第一篇将简单介绍performance_schema是什么、有什么用、用法快速入门,它由哪些表组成以及这些表的用途。 一、performance_schema简介performanceschema是运行在较低级别的......
  • Unity框架:JKFrame2.0学习笔记(五)——事件系统(2)
    前言上一篇记录了框架的事件系统的内部构成和实现,这篇记录下事件系统的使用。如何使用新建脚本EventTestusingJKFrame;usingUnityEngine;publicclassEventTest:MonoBehaviour{voidStart(){//添加监听EventSystem.AddEventListener("inp......
  • 关于spinninup的学习笔记
    作为reinforcementlearning的一个入门学习的项目,spinningup的地址:https://spinningup.openai.com/en/latest/index.html  =================================================......
  • Go笔记(八):指针
    1、指针在Go中,指针的操作有两个符号:&(取地址)和*(变量指针的声明|取指针变量的值)。一个指针变量指向了一个值的内存地址。Go中函数传值皆为值拷贝,对于引用类型的传值,可以创建一个指针变量,无需拷贝数据。Go中,类型指针不能进行偏移和运算。2、指针地址和指针......
  • ReactiveUI使用笔记,教程总结
    ReactiveUI使用笔记,教程总结一、LINQ和RxLINQ(LanguageIntergratedQuery)对数据集合、关系数据、XML文件等对象进行查询和提取数据的技术,提供了统一的类似SQL的语法来对数据进行查询,而不用关心数据源的不同。二、Rx(ReactiveExtensions)对LING的一种扩展,提供了一种新的组织和......
  • TypeScript学习笔记-尚硅谷TypeScript教程(李立超老师TS新课)
    TypeScript学习笔记-尚硅谷TypeScript教程(李立超老师TS新课)https://blog.csdn.net/m0_46549017/article/details/124626987?ops_request_misc=&request_id=&biz_id=&utm_medium=distribute.pc_search_result.none-task-blog-2~all~koosearch~default-2-124626987-null-null.142^......
  • Linux学习笔记
    IP地址和主机名IP地址ifconfig可以用来查询本机的IP地址,如果不能使用,可以通过installnet-tools安装。Centos系统下ens33表示主网卡;inet后表示IP地址;lo表示本地回环网卡;127.0.0.1表示代指本机;0.0.0.0可以用于代指本机,同时在放行设置中0.0.0.0表示允许任意IP访问。主机名h......