C++复习笔记(1)
复(su)习(cheng)一下c++。
1. 函数
函数重载:允许用同一函数名定义多个函数,但这些函数必须参数个数不同或类型不同。
函数模版:
(应该是跟java的泛化类似,内容待扩展)
template <typename T>
T min_test(T a, T b) {
return a<b?a:b;
} int main() {
cout<<min_test(1.2, 1.1)<<endl;
cout<<min_test<int>(2,3)<<endl;
return 0;
}
大概就是这么个意思。T代表一个位置的数据类型。利用函数模版定义的函数,既可以自动识别类型,也可以指定类型。指定类型应该是可以不完全指定,但是必须按顺序。
2. 数组
字符数组:
char str[10]="book";
这样定义的数组,str的前4个位置分别是book,后面的位置都是\0。
cout<<strlen(str)<<" "<< sizeof(str)<<endl;
这行命令将输出:4 10。
strlen()是函数,统计到\0时就结束。sizeof()是运算符,计算数据空间的大小。
3. 指针和引用
总的来说,*和&各有两个意义:
int a=1;
int* b=&a;
int& c=a;
*b=2;
第二行的*代表声明的变量类型为int的指针,&代表取地址。第三行的&代表引用。第四行的*代表解引用。
数组名代表数组第一个元素的地址。
int a[3]={1,2,3};
int* p3=a;
cout<<*p3<<" "<<*(p3+1)<<endl;
指向数组的指针和指针数组:
int (*p1)[4];
int *p2[4];
p1是指向4个元素的数组的指针,p2是一个4个指针的数组。
字符串与指针:
char *s1 = "hello";
cout<<s1<<" "<<*(s1+1)<<endl;
char s2[10]="abc";
cout<<s2<<" "<<*(s2+2)<<endl;
输出结果是:
hello e
abc c
s1和s2基本上可以看成是等价的,形式上来看。
函数指针:
int pa(int x) {
return x+1;
}
int pb(int x) {
return x-1;
}
int main() {
int (*fp) (int x);
fp = pa;
cout<<fp(5)<<endl;
fp = &pb;
cout<<fp(5)<<endl;
return 0;
}
声明就是跟fp那种方法生命。在赋值的时候,注意函数名其实就已经表示了该函数的地址,所以加不加取地址符都一样。
常引用不能通过引用对目标值进行修改。
4. 结构体,共用体,枚举
共用体的不同数据类型共用一段内存空间。
结构体和共用体占用的内存计算(没搞懂,待补充)
5. 预处理
宏定义:
简单宏定义中,替换部分是表达式的时候,要加括号。带参数的表达式也要各种加括号。
复合语句的宏在预处理时会被展开,所以可以用do {} while(0)来把复合语句变成单一语句。
条件编译中,定义的宏如果只作为条件,可以没有内容。
(大概先这样,慢慢补充)
C++复习笔记(1)的更多相关文章
- Java基础复习笔记系列 九 网络编程
Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...
- Java基础复习笔记系列 八 多线程编程
Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...
- Java基础复习笔记系列 七 IO操作
Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...
- Java基础复习笔记系列 五 常用类
Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...
- Java基础复习笔记系列 四 数组
Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...
- Java基础复习笔记基本排序算法
Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...
- Angular复习笔记7-路由(下)
Angular复习笔记7-路由(下) 这是angular路由的第二篇,也是最后一篇.继续上一章的内容 路由跳转 Web应用中的页面跳转,指的是应用响应某个事件,从一个页面跳转到另一个页面的行为.对于使 ...
- Angular复习笔记7-路由(上)
Angular复习笔记7-路由(上) 关于Angular路由的部分将分为上下两篇来介绍.这是第一篇. 概述 路由所要解决的核心问题是通过建立URL和页面的对应关系,使得不同的页面可以用不同的URL来表 ...
- Angular复习笔记6-依赖注入
Angular复习笔记6-依赖注入 依赖注入(DependencyInjection)是Angular实现重要功能的一种设计模式.一个大型应用的开发通常会涉及很多组件和服务,这些组件和服务之间有着错综 ...
- Angular复习笔记5-指令
Angular复习笔记5-指令 在Angular中,指令是一个重要的概念,它作用在特定的DOM元素上,可以扩展这个元素的功能,为元素增加新的行为.本质上,组件可以被理解为一种带有视图的指令.组件继承自 ...
随机推荐
- POLARDB与其他关系型数据库对比
https://baijiahao.baidu.com/s?id=1610828839695075926&wfr=spider&for=pc 前言 在数据库的选择上,MySQL成为中国 ...
- webservcie学习之webservice是什么
之前写代码,只是用到的时候才去看相关技术,用过后也没有再回头特别 去看,现在突然发现对一些技术的了解不够深刻,故现在准备再从头对用到的技术深入的学习下.就从webservice开始.首先对我不解的地方 ...
- 风炫安全WEB安全学习第二十三节课 利用XSS获取COOKIE
风炫安全WEB安全学习第二十三节课 利用XSS获取COOKIE XSS如何利用 获取COOKIE 我们使用pikachu写的pkxss后台 使用方法: <img src="http:/ ...
- MariaDB Galera Cluster集群搭建
MariaDB Galera Cluster是什么? Galera Cluster是由第三方公司Codership所研发的一套免费开源的集群高可用方案,实现了数据零丢失,官网地址为http://g ...
- 详解线程池的作用及Java中如何使用线程池
服务端应用程序(如数据库和 Web 服务器)需要处理来自客户端的高并发.耗时较短的请求任务,所以频繁的创建处理这些请求的所需要的线程就是一个非常消耗资源的操作.常规的方法是针对一个新的请求创建一个新线 ...
- Docusaurus2 快速建站,发布 GitHub Pages
Docusaurus2 可快速搭建文档.博客.官网等网站,并发布到 GitHub Pages, Serverless 等. 我们只需 Markdown 写写内容就行,也可直接编写 React 组件嵌入 ...
- 【JDBC核心】数据库事务
数据库事务 概述 事务是逻辑上的一组操作,或者说一个独立的工作单元.事务内的语句,要么全部执行成功,要么全部执行失败. 事务处理 数据一旦提交,就不可回滚.数据意味着提交的情况: 当一个连接对象被创建 ...
- 十六:SQL注入之查询方式及报错盲注
在很多注入时,有很多注入会出现无回显的情况,其中不回显的原因可能是SQL查询语句有问题,这时候我们需要用到相关的报错或者盲注进行后续操作,同时作为手工注入的时候,需要提前了解SQL语句能更好的选择对应 ...
- Log4j配置按照文件大小和日期分割日志文件
目录 Log4j 下载地址 文件大小分割日志文件 以日期分割每天产生一个日志文件 自定义信息输出到日志文件 Log4j 下载地址 Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控 ...
- 【Linux】iptables配置文件中的一些疑问
1.看到配置文件中开头会写一句话,但是数值还都不一样 括号里面的数值的含义是:通过该规则的数据包和字节总数 Chain FORWARD (policy DROP 0 packets, 0 bytes) ...