C++学习笔记1--基础知识
#include <iomanip>
setpresition(int n); 设置输出精度浮点数是n.
【goto声明】
goto也被称为无条件分支语句购买勇于改变运行顺序的声明。goto一般声明格公式:
goto 牌号。
例:
#include <iostream>
using namespace std;
int main(int args, char *argv[]) {
int ivar = 0;
int num = 0;
label:
ivar ++;
num += ivar;
if(ivar < 10) {
goto label;
}
cout << num << endl;
return 0;
}
goto语句效率较低。
goto语句不能越过复合语句之外的变量定义的语句。
调用默认參数的函数使用方法举例:
#include <iostream>
using namespace std;
void OutputInfo(const char* pchData="Stay hungry,Stay foolish.") {
cout << pchData << endl; //输出信息
}
int main(int argc, int *argv[]) {
OutputInfo(); //利用默认值作为函数实际參数
OutputInfo("lasolmi"); //直接传递实际參数
return 0;
}
【可变參数】
声明可变參数的函数和声明普通函数一样,仅仅是參数列表中有一个"..."。比如:
void OutputInfo(int num, ...)
对于可变參数的函数。在定义函数时须要一一读取用户传递的实际參数。
能够使用va_list类型和va_start、va_arg、va_end 3个宏读取传递到函数中的參数值。使用可变參数须要引用STDARG.H头文件。
例:定义并调用可变參数函数
#include <iostream>
#include <stdarg.h>
using namespace std;
void OutputInfo(int num,...) {
va_list arguments;
va_start(arguments, num);
while(num--) {
char *pchData = va_arg(arguments,char*);
int iData = va_arg(arguments, int);
cout << pchData << endl;
cout << iData << endl;
}
va_end(arguments);
}
int main(int argc, int *argv[]) {
OutputInfo(2, "Bejing", 2008, "lasolmi", 2014);
return 0;
}
重载函数:指多个函数具有同样的函数标识符,但參数类型或參数个数不同。
函数调用时,编译器以參数的类型及个数来区分调用哪个函数。
【内联函数 inline】
使用内联函数能够降低函数调用带来的开销(在程序所在文件内移动指针寻找调用函数地址带来的开销),应该在函数实现代码非常简短或者调用该函数次数相对较少的情况下将函数定义为内联函数。
变量的存储类别:auto; static; register; extern
auto变量:C++中默认的存储类型
自己主动变量的作用域仅限于定义该变量的个体内。
动态存储,栈中不同个体中同意使用同名的变量而不会混淆。
static变量:
在函数中定义就在函数中使用;但生命期为整个程序。
register变量:
寄存器变量将局部变量的值存放在CPU的寄存器中,使用时不须要訪问内存,而直接从寄存器中读写。
(1)寄存器变量属于动态存储方式。凡须要使用静态存储方式的变量不能定义为寄存器变量。
(2)编译程序会自己主动决定哪个变量使用寄存器存储。register能够起到程序优化的作用。
extern变量:
在使用其它源文件的全局变量时,仅仅须要在本源文件里使用externkeyword来声明这个变量就可以。
指向函数的指针:指针变量也能够指向一个函数。一个函数在编译时被分配给一个入口地址。这个函数入口地址就称为函数的指针,能够用一个指针变量指向函数,然后通过该指针变量调用此函数。
例:
#include <iostream>
#include <iomanip>
using namespace std;
int avg(int a, int b);
int main(int argc, int *argv[]) {
int iWidth, iLength, iResult;
iWidth = 10;
iLength = 30;
int (*pFun)(int, int); //定义函数指针
pFun = avg;
iResult = (*pFun)(iWidth,iLength);
cout << iResult << endl;
return 0;
}
int avg(int a, int b) {
return (a+b)/2;
}
【引用】
引用的形式:
数据类型 & 表达式
比如:
int a = 10;
int & ia = a;
ia = 2;
定义了一个引用变量ia。它是变量a的别名,对ia的操作与对a的操作全然一样。ia=2把2赋给a。&ia返回a的地址,运行a=2和运行ia=2等价。
使用引用的说明:
(1)一个C++引用被初始化后,无法使用它再去引用还有一个对象,它不能被又一次约束。
(2)引用变量仅仅是其它变量的别名,对他的操作与原来对象的操作具有同样作用。
(3)指针变量与引用有两点主要差别:一个指针是一种数据类型,而引用不是一个数据类型,指针能够转换为它所指向变量的数据类型,以便赋值运算符两边的类型想匹配;而在使用引用时,系统要求引用和变量的数据类型必须同样,不能进行类型转换。二是引用使用起来比指针方
便。
(4)引用应该初始化,否则会报错。
使用引用传递參数
swap(int &a, int &b) {
int tmp = a; a = b; b = tmp;
}
指针传递參数
swap(int *a, int *b) {
int tmp = *a; *a = *b; *b = tmp;
}
a[i][j] == *(*(a+i)+j)
【指针数组】
一维指针数组的定义形式为:
类型名 *数组名[数组长度];
比如:int *p[5];
指针数组中的数组名也是一个指针变量,该指针变量为指向指针的指针。
例:使用结构体指针变量引用结构体成员。
#include <iostream>
using namespace std;
int main(int argc, int *argv[]) {
struct PERSONINFO {
int index;
char name[30];
short age;
}*pPersonInfo, pInfo={0,"lasolmi",21};
pPersonInfo = &pInfo;
cout << pPersonInfo->index << endl;
cout << pPersonInfo->name << endl;
cout << pPersonInfo->age << endl;
return 0;
}
【结构体的嵌套】
(1)在结构体中定义子结构体。
(2)在定义时声明其它已定义好的结构体变量。
可在声明结构体数组时直接对数组进行初始化:
struct PersonInfo {
int index;
char name[30];
short age;
}Person[4] = {
{1, "figo", 23},
(2, "ling", 22),
(3, "me", 21),
(4, "cong", 20)
};
【共用体】
定义共用体类型的一般形式为:
union 共用体类型名 {
成员类型 共用体成员名1;
成员类型 共用体成员名2;
...
成员类型 共用体成员名n;
};
共用体的大小:共用体每一个成员分别占有自己的内存单元。共用体变量所占的内存长度等于最长的成员的长度。一个共用体变量不能同一时候存放多个成员的值。某一时刻仅仅能存放当中的一个成员的值,这就是最后赋予它的值。
【枚举类型】
常见的枚举类型声明形式:
enum 枚举类型名
{
标识符[=整型常量];
标识符[=整型常量];
标识符[=整型常量];
}枚举变量;
范例:枚举变量的赋值。
#include <iostream>
using namespace std;
int main(int argc, int *argv[]) {
enum Weekday {Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};
int a = 2 , b = 1;
Weekday day;
day = (Weekday)a;
cout << day << endl;
day = (Weekday)(a-b);
cout << day << endl;
day = (Weekday)(Sunday+Wednesday);
cout << day << endl;
day = (Weekday)5;
cout << day << endl;
return 0;
}
输出结果为:
2
1
3
5
【自己定义数据类型】
typedef <原类型名> <新类型名>
例:
typedef in INTEGER;
INTEGER a, b;
相当于:
int a, b;
版权声明:本文博主原创文章,博客,未经同意不得转载。
C++学习笔记1--基础知识的更多相关文章
- MyBatis:学习笔记(1)——基础知识
MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...
- C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)
一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字 ...
- C#学习笔记(基础知识回顾)之值传递和引用传递
一:要了解值传递和引用传递,先要知道这两种类型含义,可以参考上一篇 C#学习笔记(基础知识回顾)之值类型和引用类型 二:给方法传递参数分为值传递和引用传递. 2.1在变量通过引用传递给方法时,被调用的 ...
- C#学习笔记(基础知识回顾)之值类型和引用类型
一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...
- Quartz学习笔记:基础知识
Quartz学习笔记:基础知识 引入Quartz 关于任务调度 关于任务调度,Java.util.Timer是最简单的一种实现任务调度的方法,简单的使用如下: import java.util.Tim ...
- .net学习笔记---xml基础知识
一.XML简介 XML是一种标记语言,用于描述数据,它提供一种标准化的方式来来表示文本数据.XML文档以.xml为后缀.需要彻底注意的是XML是区分大小写的. 先从一个简单的XML例子来了解下xml基 ...
- Docker的学习笔记(一)基础知识
概述 本人最近在学习docker相关的知识,既是工作本身的需要也是自己对技术的追求的必要,以后我也会推出容器相关的随笔,既可以增长自己的知识,也可以和读者广泛交流,岂不乐乎?话不多说.第一篇先介绍do ...
- Scala学习笔记--正则表达式基础知识、如何在scala内使用
正则表达式语法:https://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx 基础知识:正则表达式30分钟入门教程 http://www. ...
- (C/C++学习笔记) 一. 基础知识
一. 基础知识 ● 程序和C/C++ 程序: 根据Wirth (1976), Algorithms + Data Structures = Programs. Whence C: 1972, Denn ...
- C#学习笔记(基础知识回顾)之枚举
一:枚举的含义 枚举是用户定义的整数类型.在声明一个枚举时,要指定该枚举的示例可以包含的一组可接受的值.还可以给值指定易于记忆的名称.个人理解就是为一组整数值赋予意义. 二:枚举的优势 2.1:枚举可 ...
随机推荐
- 在Windows下使用Hexo+GithubPage搭建博客的过程
1.安装Node.js 下载地址:传送门 去 node.js 官网下载相应版本,进行安装即可. 可以通过node -v的命令来测试NodeJS是否安装成功 2.安装Git 下载地址:传送门 去 Git ...
- zoj1610(线段树)
题目连接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1610 题意:在0-8000长的线段里面,按先后次序依次覆盖颜色, ...
- Eureka 的 Application Client client的执行演示样例
上篇以一个 demo 演示样例介绍了 Eureka 的 Application Service 客户端角色.今天我们继续了解 Eureka 的 Application Client 客 ...
- 收藏的Android很好用的组件或者框架。
收藏的Android很好用的组件或者框架. android框架 先说两个站点: http://www.androidviews.net/ 非常好的国外开源码站,就是訪问速度有点慢啊 http://w ...
- 聊聊高并发(二十九)解析java.util.concurrent各个组件(十一) 再看看ReentrantReadWriteLock可重入读-写锁
上一篇聊聊高并发(二十八)解析java.util.concurrent各个组件(十) 理解ReentrantReadWriteLock可重入读-写锁 讲了可重入读写锁的基本情况和基本的方法,显示了怎样 ...
- OpenCV中的SVM參数优化
SVM(支持向量机)是机器学习算法里用得最多的一种算法.SVM最经常使用的是用于分类,只是SVM也能够用于回归,我的实验中就是用SVM来实现SVR(支持向量回归). 对于功能这么强的算法,opencv ...
- Bootstrap网站模板
根据一篇文章,我再想想写下,无意义,他决定收手. 或者直接做一个简单的基本的模板它 主要知识点包含栅格系统.响应式图片.导航条(固定在顶部和底部).搜索框等等 详细每一个知识点不再赘述,參考Boots ...
- python学习笔记之八:迭代器和生成器
一. 迭代器 在前面的笔记中,已经提到过迭代器(和可迭代),这里会对此进行深入讨论.只讨论一个特殊方法---__iter__,这个方法是迭代器规则的基础. 1.1 迭代器规则 迭代的意思是重复做一些事 ...
- 高速幂 POW优化
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h&g ...
- 重新想象 Windows 8 Store Apps (16) - 控件基础: 依赖属性, 附加属性, 控件的继承关系, 路由事件和命中测试
原文:重新想象 Windows 8 Store Apps (16) - 控件基础: 依赖属性, 附加属性, 控件的继承关系, 路由事件和命中测试 [源码下载] 重新想象 Windows 8 Store ...