C++代码复习笔记:第三章
getline这个方法的使用, 可以获取用户输入的一行数据, 保存到数组中:
#include <iostream>
#include <string>
int main() {
using namespace std;
// string s;
// getline(cin, s);
// cout << s << endl;
const int size = ;
string strs[size];
for(int i=; i<size; i++) {
getline( cin, strs[i] );
}
for(int i=; i<size; i++) {
cout << strs[i] << endl;
}
return ;
}
使用内置类, 计算字符串的长度:
#include <iostream>
#include <cstring>
int main() {
using namespace std;
char str[] = "abcd";
cout << strlen(str) << endl;
return ;
}
C++模版类, 和java泛型差不多 , C语言是没有模版类这一说的, C++中新增了模版:
#include <iostream>
#include <string>
#include <array> int main() {
using namespace std;
const int SIZE = ;
array<string, SIZE> *p;
for(int i=; i<SIZE; i++) {
cout << "enter number" << endl;
cin >> (*p)[i];
cout << "" << endl;
}
return ;
}
数字指针, 在实际上,如果一个函数返回指针没有啥意义,因为, 如果函数内部要返回指针,那么这个指针必须是外部传递进来的参数,如果是内部创建指针, 当函数执行结束的时候, 内部指针自然会被销毁;
#include <iostream>
#include <string>
#include <array>
int* run(int *n) {
*n = (*n)*;
return n;
}
int main() {
int number = ;
int *n = run(&number);
std::cout << *n << std::endl;
return ;
}
指针的写法非常多,稍微不同的写法,代表的意义可能天差地别, 以下的(*p)[0]是指获取数组的第一个值 , 但是*p[0]的意思却完全不同了:
std::array<int,> *p;
(*p)[] = number;
函数指针
#include <iostream>
#include <string>
#include <array>
void show(int a, int b) {
using namespace std;
cout << a+b <<endl;
}
int main() {
void (*p)(int, int);
p = show;
(*p)(,);
return ;
}
函数指针
#include <iostream>
using namespace std;
void show(int num) {
cout << num* << endl;
}
void brige(int num, void (*p)(int) ) {
p(num);
}
int main() {
int number;
cout << "enter number" << endl;
cin >> number;
brige(number, show);
return ;
}
内联函数, 是C++新增的特性, 使用的比较少, 主要是代码优化有关系, 对于代码比较少, 而且调用次数比较多的函数, 可以定义为内联函数;
内部原理是定义宏:
#include <iostream>
#include <string>
inline void show() {
using namespace std;
cout << "nice" << endl;
}
int main() {
show();
return ;
}
引用也是C++新增的特性, 务必区别于指针, 引用的地址和原来数据的地址是相同的, 引用必须在变量定义的时候就初始化:
#include <iostream>
int main() {
int i = ;
int &j = i;
j = ;
std::cout << i << std::endl;
std::cout << &i << std::endl;
std::cout << &j << std::endl;
return ;
}
按照引用传递主要用在函数参数中, 在形参上定义引用, 那么在函数内部做的任何数据修改, 都会修改原始值:
#include <iostream>
void swap (int &a, int &b) {
int temp;
temp = a;
a = b;
b = temp;
}
int main() {
using namespace std;
int a = ;
int b = ;
swap( a, b );
cout << a << endl; //输出2
cout << b << endl; //输出1
return ;
}
编译器会发出警告, 告诉开发者一些错误, 比如函数没有指定返回值, 但是这个并不会影响程序正常运行:
#include <iostream>
#include <cstring>
int run () {
if(false){
return ;
}else{ }
}
int main() {
run();
printf("end of file");
return ;
}
C++中原型的概念:原型描述了函数的接口, 它将函数的返回类型, 参数类型以及参数个数定义在文件头, 原型有利于程序执行效率的进行提高 , 相当于java中的接口文件, 只是包含接口, 没有具体的实现:
#include <iostream>
void run(); //原型的定义
#include <cstring>
int main() {
run();
return ;
}
void run () {
std::cout << "done" << std::endl;
}
C++代码复习笔记:第三章的更多相关文章
- C语言代码复习笔记:第二章
输出星星 #include <stdio.h> void printStart( int num ) { ) { printf("*"); }; } int main( ...
- Android群英传笔记——第三章:Android控件架构与自定义控件讲解
Android群英传笔记--第三章:Android控件架构与自定义控件讲解 真的很久没有更新博客了,三四天了吧,搬家干嘛的,心累,事件又很紧,抽时间把第三章大致的看完了,当然,我还是有一点View的基 ...
- 《Linux内核设计与分析》第六周读书笔记——第三章
<Linux内核设计与实现>第六周读书笔记——第三章 20135301张忻估算学习时间:共2.5小时读书:2.0代码:0作业:0博客:0.5实际学习时间:共3.0小时读书:2.0代码:0作 ...
- spring boot 笔记--第三章
spring boot 笔记 第三章,使用Spring boot 构建系统: 强烈建议支持依赖管理的构建系统,Maven或Gradle 依赖管理: Spring Boot的每版本都会提供它支持的依赖列 ...
- The Road to learn React书籍学习笔记(第三章)
The Road to learn React书籍学习笔记(第三章) 代码详情 声明周期方法 通过之前的学习,可以了解到ES6 类组件中的生命周期方法 constructor() 和 render() ...
- JVM学习笔记-第三章-垃圾收集器与内存分配策略
JVM学习笔记-第三章-垃圾收集器与内存分配策略 tips:对于3.4之前的章节可见博客:https://blog.csdn.net/sanhewuyang/article/details/95380 ...
- 《DOM Scripting》学习笔记-——第三章 DOM
<Dom Scripting>学习笔记 第三章 DOM 本章内容: 1.节点的概念. 2.四个DOM方法:getElementById, getElementsByTagName, get ...
- [HeadFrist-HTMLCSS学习笔记]第三章构建模块:Web页面建设
[HeadFrist-HTMLCSS学习笔记]第三章构建模块:Web页面建设 敲黑板!! <q>元素添加短引用,<blockquote>添加长引用 在段落里添加引用就使用< ...
- Unity 黑暗之光 笔记 第三章
第三章 角色控制 1.创建游戏运行场景并导入素材资源 2.创建和管理标签 1 //const 表明这个是一个共有的不可变的变量 2 public const string ground = &qu ...
- 《linux内核设计与实现》读书笔记第三章
第3章 进程管理 3.1 进程 1.进程 进程就是处于执行期的程序. 进程包括: 可执行程序代码 打开的文件 挂起的信号 内核内部数据 处理器状态 一个或多个具有内存映射的内存地址空间 一个或多个执行 ...
随机推荐
- 使用JavaScript的数组实现数据结构中的队列与堆栈
今天在项目中要使用JavaScript实现数据结构中的队列和堆栈,这里做一下总结. 一.队列和堆栈的简单介绍 1.1.队列的基本概念 队列:是一种支持先进先出(FIFO)的集合,即先被插入的数据,先被 ...
- JavaScript学习总结(十五)——Function类
在JavaScript中,函数其实是对象,每个函数都是Function类的实例,既然函数对象,那么就具有自己的属性和方法,因此,函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定. 一.函数的 ...
- Java 获取客户端IP
像移动网关一样,iisforward这个ISAPI过滤器也会对request对象进行再包装,附加一些WLS要用的头信息.这种情况下,直接用request.getRemoteAddr()是无法取到真正的 ...
- Javascript:自己写异步流程编程框架
背景 自从NodeJs出来以后,异步编程便更加系统化和框架话了,为了应对异步编程框架带来的深层嵌套问题,社区也出现了异步流程编程框架,本文主要对异步流程框架做一个简单的解析. 现配代码了 var As ...
- Linux线程优先级
转自:https://www.cnblogs.com/imapla/p/4234258.html Linux内核的三种调度策略: 1.SCHED_OTHER 分时调度策略 2.SCHED_FIFO ...
- unity3d 5.6烘焙教程
unity5.6是今年发布,作为5.x的最后一个版本,有很多烘焙优势,在此总结一些作为5.x系列完结的笔记这个版本在烘焙上的特点就是增加了渐进光照贴图(Progressive Lightmapper) ...
- 递归搜寻NSString中重复的文本
递归搜寻NSString中重复的文本 效果 源码 https://github.com/YouXianMing/iOS-Project-Examples 中的 StringRange 项目 // // ...
- 每天定时备份mysql数据库任务
需求: 1,每天4点备份mysql数据: 2,为节省空间,删除超过3个月的所有备份数据: 3,删除超过7天的备份数据,保留3个月里的 10号 20号 30号的备份数据: #创建shell文件 vim ...
- Asp.Net Core 文件上传处理
本文主要介绍后台接收处理 1.在使用控制器接收 : [HttpPost] : public IActionResult UploadFiles(IList<IFormFile> files ...
- [Link]Gearman分布式任务处理系统
http://blog.csdn.net/jiao_fuyou/article/category/1745977 http://www.cnblogs.com/cocowool/archive/201 ...