`
xml
  • 浏览: 8017 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

C++学习笔记--数据类型

    博客分类:
  • C++
阅读更多
每天花点时间,重新拾起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 = &pi;


这段代码:
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++ 学习笔记 - 字串数据类型

    C++11学习笔记 - 字串数据类型希望你觉得有用

    C++11 学习笔记 - 字串数据类型

    C++11学习笔记 - 字串数据类型 希望你觉得有用

    C++11 基础 - 字串

    C++11学习笔记 - 字串数据类型 希望你喜欢

    C++整理笔记word版——01 C++学习笔记

    C++基础的学习笔记(其中的代码源件可私信留言) C++中的空头程序 使用C++书写hello world 学习变量 学习常量 标识符命名规则 数据类型 运算符 程序流程结构 数组 函数 指针 结构体

    C++学习笔记

    C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。

    c++学习笔记(自己写的大约有30页)

    C++学习笔记。C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,...

    VS环境下的C++学习笔记20191209.rar

    VS环境下的C++学习笔记 包含C++基础操作&功能的测试笔记(基础数据类型的操作,基础容器的运用) 各种初学Bug测试笔记 VS调试灵异问题笔记 MCF框架的部分基础知识笔记 模型图形学|线性代数相关的基础笔记: ...

    C++ 基本数据类型

    学习C++必经之路,入门级知识总结,笔记本知识概况,走一步再走一步

    java与c++交互(JNI学习笔记)

    1.C++与java交互基本介绍 2.C++获取java属性值、设置java属性值 3.C++创建java对象 4.C++中数据类型间的转换

    c++基础笔记:预处理命令、命名空间、转义字符、输入输出、数据类型、算数运算符、类型转换等

    本篇文章是博主在学习c++基础时所做第一篇笔记,适用于有一定c++学习基础的同学,有些地方是按照自己的学习习惯所作,望大家谅解。另外,欢迎交流,如有错误,敬请指正。大家一起进步!c++基础笔记:预处理命令、...

    Java 基础学习笔记:数据类型,常见运算,final &amp;amp; static,Java 常见类,异常 &amp;amp; 反射

    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_学习笔记

    IAR_for_AVR_学习笔记 bool 数据类型在C++语言里是默认支持的。如果你在C 代码的头文件里包含st dbool.h, bool 数据类型也可以使用在C 语言里。也可以使用布尔值 false 和 true

    Python数据类型学习笔记

    带你走进数据类型 一:整数、浮点数 Python中整数和浮点数的定义以及运算和C++都是一样的,我在这里就不需多说了,我就说明一点:Python相对于C/C++而言,定义整数没有int 和 long long 这些区分的,直接赋值即可。...

    C++中的vector容器对象学习笔记

    C++中数组很坑,有没有类似Python中list的数据类型呢?类似的就是vector! vector 是同一种类型的对象的集合 ,每个对象都有一个对应的整数索引值。和 string 对象一样,标准库将负责管理与存储元素相关的内存。 ...

    c#学习笔记.txt

    c#学习笔记(1) 51099在线学习网发布 文章来源:网络收集 发布时间:2006-05-25 字体: [大 中 小] 51099在线学习网 http://www.51099.com 1, 结构(struct) 与 类(class) [attributes] [modifiers] struct ...

    南方科技大学计算机系C++程序设计.rar

    今天写写最近学习的C++课程笔记,南科大于仕琪老师的C++课程我是在闲暇时光花了两天时间看完的,(于教授是OpenCV中国论坛管理者,技术高超为人低调,之前也在深圳先进院工作过,也算是我的前辈了,需要好好向前辈...

    C++基础入门.pdf

    C++编程语言的基础入门学习笔记,涉及C++语言的数据类型 、运算符、程序运行流程、数组、函数、指针和结构体的相关知识点。适合零基础学习。

    Python学习笔记+入门基础教程+语法总结+进阶版合集完整版

    Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。 本教程将介绍Python入门基础教程,包括Python的基本概念、语法规则和常用功能等。无论是初学者还是有经验的开发者,都能从中受益。同时,本教程还...

    数据结构与算法分析——C语言描述(Weiss著)的学习笔记

    通过C程序的实现,着重阐述了抽象数据类型的概念,并对算法的效率、性能和运行时间进行了分析。 《数据结构与算法分析——C语言描述》(原书第2版),英文版的名称是《Data Structures and Algorithm Analysis in C...

    非常详细的python教程/学习笔记整理版

    Python在各个编程语言中比较适合新手学习,Python解释器易于扩展,可以使用C、C++或其他可以通过C调用的语言扩展新的功能和数据类型。 Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用...

Global site tag (gtag.js) - Google Analytics