每天花点时间,重新拾起C++,记录一些学习笔记,内容根据自己理解逐步更新。
1.指针
我们最熟悉的,一个字节由8位构成,一个字由32位构成,这是针对32位操作系统,其实字的大小是依赖于机器的,C++基本数据类型,int/short/long/float/double/long double长度都是以字为单位,如short为半个字,int为一个字,double是两个字,具体它们能代表多少位数据,能存储多大范围的值就需要根据操作系统环境而定。
文字常量是不可寻址的,变量可以。根据一个例子学习指针和地址的存储空间变化。
#include "iostream"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
/* ival为整型变量 */
/* pi指向ival地址 */
/* ppi指向pi地址,即指针的指针 */
/* *ppi为pi指针所指向的值 */
int ival = 1024;
int *pi = &ival;
int **ppi = π
cout << "The value of ival\n"
<< "direct value: " << ival << "\n" //1024
<< "indirect value: " << *pi << "\n" //1024
<< "double indirect value: " << **ppi << "\n" //1024
<< "value of *ppi: " << **ppi << "\n" //1024
<< endl;
/* pi地址加2个单位,对整形变量而言,地址值增加2×4字节=8 */
pi = pi + 2;
cout << pi;
return 0;
}
2.字符串
C风格的字符串和标准C++ string类型,前者是作为标准C++一个部分的标准C库,后者是标准C++提供的string类,主要描述C风格的字符串。
字符串为空的定义:
char *pc1 = 0;
char *pc2 = "";
C风格字符串的字符指针总是指向一个相关联的字符数组,通过自增可以前进到终止空字符之后,这个地方容易出错。
#include "iostream"
using namespace std;
const char *st = "The expense of spirit\n";
int _tmain(int argc, _TCHAR* argv[])
{
int len = 0;
while ( *st++ )
++len;
/* st指针前进到字符串终止空字符之后 */
/* len长度为字符串长度加1 */
st = st - len;
/* 输出内容为"he expense of spirit" */
cout << len << ": " << st;
return 0;
}
可以单独增加一个指针计算st长度
const char *p = st;
由于字符指针的底层特性,使得用它表示字符串容易出错,因此C++标准库提供了字符串类抽象的一个公共实现,要使用string类型,必须包含头文件
#include "string"
3.const关键字
“试图将一个非const对象的指针指向一个常量对象”的动作都将引起编译错误,const对象的地址只能赋值给指向const对象的指针,但是指向const对象的指针可以被赋以一个非const对象的地址。
注意这三者区别:
/* 指向double类型的,定义成const对象的指针 */
const double *pc = 0;
const double minWage = 9.60;
pc = &minWage;
/* 指向int类型的const指针 */
int errNumb = 0;
int *const curErr = &errNumb;
/* 指向double类型的,定义成const对象的const指针 */
const double pi = 3.14159;
const double *const pi_ptr = π
这段代码:
using namespace std;
const int ival = 1024;
const int *const &pi_ref = &ival;
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
如果这样定义就会出错:
const int *&pi_ref = &ival;
定义int*为T,上面的代码等价于:
const T &pi_ref = &ival;
编译器会这样来处理这段赋值计算:
T temp;
temp = &ival;
const T &pi_ref = temp;
这里temp是"int *"类型,编译器不能强制把"const int *"转变为"int *"类型,原程序没有问题,是因为编译器这样处理了,定义"const int *"为T:
T temp;
temp = &ival;
T const &pi_ref = temp;
这样就解决了之前类型不匹配的赋值问题。
4.数组
非const的变量不能被用来指定数组的维数,这是初学C语言时会犯的错误之一。C++不能在编译时刻或运行时刻对数组下标进行范围检查,因此即使程序能够通过编译并执行,但仍可能存在错误。
ia[ 1, 2 ]在C++中是合法的,但"1,2"是一个逗号表达式,因此它等价于ia[2]。
定义数组
int ia[9] = { 0, 1, 1, 2, 3, 5, 8, 13, 21 };
ia、&ia[0]是等价的,ia+1、&ia[1]是等价的,可以通过指针实现数组的遍历:
#include "iostream"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int ia[9] = { 0, 1, 1, 2, 3, 5, 8, 13, 21 };
int *pbegin = ia;
int *pend = ia + 9;
while ( pbegin != pend ) {
cout << *pbegin << ' ';
++ pbegin;
}
return 0;
}
5.vector容器
使用vector需要添加头文件vector,vector有两种不同形式:数组习惯和STL习惯。
数组习惯
vector<int> ivec(10);//与int a[10]类似
STL习惯
vector<string> text;
6.typedef
为内置的或用户定义的数据类型引入助记符号,例如:
typedef vector<int> vec_int;
vec_int vec1(10);//与vector<int> vec1(10);一样
typedef可以用来增强“复杂模板声明的定义”的可读性,增强“指向函数的指针”以及“指向类的成员函数的指针”的可读性。
/* cstr类型非"const char *" */
/* const修饰cstr类型,cstr是一个指针 */
/* cstr是一个指向字符的const指针 */
typedef char *cstring;
extern const cstring cstr;
用typedef可以方便地定义大量pair类型的对象:
typedef pair<string, string> Authors;
Authors joyce("james", "joyce");
Authors musil("robert", "musil");
if (joyce.first == "james" && joyce.second == "joyce")
/* 满足if条件,处理相关任务 */
7.volatile
volatile修饰符的用法和const类似,主要目的是提示编译器,该对象的值可能在编译器未检测到的情况下被改变,因此编译器不能武断的对引用这些对象的代码作优化处理。
参考书籍:《C++ Primer》第三版
分享到:
相关推荐
C++11学习笔记 - 字串数据类型希望你觉得有用
C++11学习笔记 - 字串数据类型 希望你觉得有用
C++11学习笔记 - 字串数据类型 希望你喜欢
C++基础的学习笔记(其中的代码源件可私信留言) C++中的空头程序 使用C++书写hello world 学习变量 学习常量 标识符命名规则 数据类型 运算符 程序流程结构 数组 函数 指针 结构体
C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。
C++学习笔记。C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,...
VS环境下的C++学习笔记 包含C++基础操作&功能的测试笔记(基础数据类型的操作,基础容器的运用) 各种初学Bug测试笔记 VS调试灵异问题笔记 MCF框架的部分基础知识笔记 模型图形学|线性代数相关的基础笔记: ...
学习C++必经之路,入门级知识总结,笔记本知识概况,走一步再走一步
1.C++与java交互基本介绍 2.C++获取java属性值、设置java属性值 3.C++创建java对象 4.C++中数据类型间的转换
本篇文章是博主在学习c++基础时所做第一篇笔记,适用于有一定c++学习基础的同学,有些地方是按照自己的学习习惯所作,望大家谅解。另外,欢迎交流,如有错误,敬请指正。大家一起进步!c++基础笔记:预处理命令、...
Java 基础学习笔记,主要包括: 10_Java常见对象.md 10_Java常见对象_2.md 1_数据类型.md 3_运算.md 4_Object通用方法.md 5_关键字.md 6_反射.md 8_泛型.md JDK8新特性.md 正则表达式.md Java是一种面向对象的编程...
IAR_for_AVR_学习笔记 bool 数据类型在C++语言里是默认支持的。如果你在C 代码的头文件里包含st dbool.h, bool 数据类型也可以使用在C 语言里。也可以使用布尔值 false 和 true
带你走进数据类型 一:整数、浮点数 Python中整数和浮点数的定义以及运算和C++都是一样的,我在这里就不需多说了,我就说明一点:Python相对于C/C++而言,定义整数没有int 和 long long 这些区分的,直接赋值即可。...
C++中数组很坑,有没有类似Python中list的数据类型呢?类似的就是vector! vector 是同一种类型的对象的集合 ,每个对象都有一个对应的整数索引值。和 string 对象一样,标准库将负责管理与存储元素相关的内存。 ...
c#学习笔记(1) 51099在线学习网发布 文章来源:网络收集 发布时间:2006-05-25 字体: [大 中 小] 51099在线学习网 http://www.51099.com 1, 结构(struct) 与 类(class) [attributes] [modifiers] struct ...
今天写写最近学习的C++课程笔记,南科大于仕琪老师的C++课程我是在闲暇时光花了两天时间看完的,(于教授是OpenCV中国论坛管理者,技术高超为人低调,之前也在深圳先进院工作过,也算是我的前辈了,需要好好向前辈...
C++编程语言的基础入门学习笔记,涉及C++语言的数据类型 、运算符、程序运行流程、数组、函数、指针和结构体的相关知识点。适合零基础学习。
Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。 本教程将介绍Python入门基础教程,包括Python的基本概念、语法规则和常用功能等。无论是初学者还是有经验的开发者,都能从中受益。同时,本教程还...
通过C程序的实现,着重阐述了抽象数据类型的概念,并对算法的效率、性能和运行时间进行了分析。 《数据结构与算法分析——C语言描述》(原书第2版),英文版的名称是《Data Structures and Algorithm Analysis in C...
Python在各个编程语言中比较适合新手学习,Python解释器易于扩展,可以使用C、C++或其他可以通过C调用的语言扩展新的功能和数据类型。 Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用...