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元素上,可以扩展这个元素的功能,为元素增加新的行为.本质上,组件可以被理解为一种带有视图的指令.组件继承自 ...
随机推荐
- 关于BackTop按钮的实现
今天在处理,首页面的制作的时候,在实现backtop按键的时候,有些思路,作为记录. 功能为,点击backtop即可,立马跳到首页的最上面,且backtop只有在页面后1/2处才显示出来. 首先,我们 ...
- hdp、cdh版本大数据maven仓库
Hdp版本: <repositories> <repository> <id>nexus</id> <name>local private ...
- kafka的概念
1.生产者: 生产者发送消息到broker,有三种确认方式(request.required.acks)acks = 0: producer不会等待broker(leader)发送ack .因为发送消 ...
- Docker-Docker部署SpringBoot项目
1.手工方式 1.1.准备Springboot jar项目 将项目打包成jar 1.2.编写Dockerfile FROM java:8 VOLUME /tmp ADD elk-web-1.0-SNA ...
- 【Redis3.0.x】实战案例
Redis3.0.x 实战案例 简介 <Redis实战>的学习笔记和总结. 书籍链接 初识 Redis Redis 简介 Redis 是一个速度非常快的键值对存储数据库,它可以存储键和五种 ...
- LeetCode53 最大子序列问题
题目描述: 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], ...
- (二)数据源处理2-xlrd操作excel
import xlrd3workbook = xlrd3.open_workbook('test_data.xlsx')sheet =workbook.sheet_by_name('Sheet1')p ...
- 经常使用的Sublime Text 快捷键
最常用的 Sublime快捷键:
- 【Oracle】10.2.0.1升级到10.2.0.5
升级数据库到10.2.0.5 因是测试环境,不需要备份:如是生产系统,建议进行全备份后再进行升级操作,预防数据丢失造成不必要的影响. 步骤: 上传并解压补丁,安装前准备,安装补丁,预升级检查, ...
- OpenID协议
背景 当我们要使用一个网站的功能时,一般都需要注册想用的账号.现在的互联网应用很多,一段时间之后你会发现你注册了一堆账号密码,根本记不住. 你可能会想到所有的网站都用同一套用户名和密码,这样虽然能解决 ...