本来是java程序员,但现在不得不面对C++愁眉苦脸。只能捡起书本从零开始,一些在脑海中有点混淆,容易混淆忘记的东西还是记下来为好,以备忘。
C++的指针知识可为及其重要的基础,如果不懂得指针的用法,那看C++的源码程序就太难了。C++的指针知识是个难点,必须克服的难点。
指针声明:
1.每个数据类型都有指针类型
int* i
char* c
2.指针本来也是一种类型,指针可以对应着指针类型即二级指针变量
int** i 即 (int*)* i【int指针类型的指针i】
3.一个*只能修饰一个指针
int* i,p 【i为指针,p为int变量】
要想一下声明多个指针,则可以:int* i,*p
指针赋值:
1.指针也可以初始化,赋值或初始化的值是同类型实体(即实体变量)的地址
int i=10;
int* ip=&i (&表示实体的地址)
int* ipt=&10 是不可以的,10是实体,而不认可具有空间地址(所以说是实体变量地址才有效)
2.指针直接赋实体值
int i=10;
int* ip=&i;
int* ipt=10 不可以,指针初始化必须是实体地址
*ip=20 可以,指针间访操作
这里的*ip为什么能直接给实体值呢?
因为*ip是所指向实体地址的间访操作,也就是指针指向实体的时候是可以读写操作的。其实这里还是赋值的地址。
3.空指针不能赋实体值
int* ip;
*ip=10 不可以
这里的*ip为什么又不能给实体值了呢?
因为这里的指针*ip没有经过初始化,*ip没有指向实体,为空指针,则就不能读写了。
指针间的操作
当指针指向具体实体后,指针也就有了具体的实体值和具体的空间地址,这时候就可以被二级指针所操作
int i=10;
int* ip=&10;
int** iip=&ip;
理解了上面的指针赋值,那么其余的指针间操作就好操作了,必须理解清楚指针在各种情况下的表示。
给指针赋值,必须是个地址,各种形式的赋值只是表现出的形式不一样,实际指针只能指向实体的地址。指针在赋值时必须是与指针类型相同的类型实体地址。但实际的存储空间的实体都是以二进制数进行存储的,那么当一个float的实体地址被一个int指针指向时,这个float实体就会被强制转换为int实体,那么数据就出现变动。这是危险的。我理解的是,指针不能在类型不同时进行转换。
今天就到此了,明天还要继续。天,有点想发狂的冲动,还有指针运算、限定、引用,函数指针。头都要大了...
分享到:
相关推荐
在C++中实现备忘录模式,通常会使用智能指针(如`std::shared_ptr`)来管理对象的生命周期,以防止内存泄漏。以下是一个简单的备忘录模式实现示例: ```cpp #include #include // 发起人角色 class Originator {...
### C++ 关键字备忘 #### `#include` - **用途**:预处理器指令,用于引入其他头文件。 - **示例**: ```cpp #include #include ``` #### `using namespace std;` - **用途**:声明使用标准命名空间`std`中...
照料者通常只是一个简单的容器,持有备忘录的指针。 ```cpp class Caretaker { private: Memento* memento; public: void setMemento(Memento* memento_) { memento = memento_; } Memento* getMemento() { ...
### C++ 快速参考备忘单 #### 基本语法与结构 1. **注释**: - 单行注释:使用 `//` 开始。 - 多行注释:使用 `/*` 开始并以 `*/` 结束。 2. **数据类型**: - 整型:`int`, `short`, `long`, `long long` - ...
- 智能指针:为了避免内存泄漏和管理资源,可以使用智能指针来自动管理备忘录实例的生命周期。 备忘录模式在实际应用中非常广泛,比如文本编辑器中的撤销功能就是备忘录模式的典型应用。此外,数据库事务恢复、游戏...
在C++中,备忘录模式通常包含三个角色: 1. **原发器(Originator)**:创建并保存备忘录,同时也负责使用备忘录来恢复其内部状态。在示例代码中,`Originator`类代表原发器,它拥有一个`State`结构体指针`m_pState`来...
1. **C++基础**:首先,C++的基础知识是必不可少的,包括数据类型、运算符、控制结构(如if-else、switch-case、for、while等)、函数的使用以及数组和指针的理解。 2. **面向对象编程**:C++的精髓在于其面向对象...
在实际编程中,可以使用Java的序列化技术实现备忘录,或者在C++中使用智能指针来管理备忘录对象的生命周期。对于Python等动态语言,可以通过拷贝模块实现浅拷贝和深拷贝。 文件"MementoPattern"可能包含了关于备忘...
在ZooKeeper的案例中,`__imp_`前缀是C++编译器为导入函数添加的标准前缀,表示它是一个导入函数的指针。如果你在编译时没有正确地链接到ZooKeeper的导入库,编译器将无法找到`zookeeper_init`的实际地址,从而导致...
C++中,备忘录模式通常使用智能指针和序列化来实现。 20. 状态模式:允许对象在其内部状态改变时改变它的行为。C++中的状态模式通过状态对象的切换来实现对象行为的动态改变。 21. 策略模式:定义一系列算法,并将...
《C++备忘录》是一本专注于C++编程语言的参考手册,旨在帮助开发者记忆和理解C++的关键概念和技术。这本书以"ebbook"的形式提供,即电子书,方便读者随时随地查阅。通过阅读这本书,你可以深入掌握C++的核心特性,...
《C++11全套设计模式-23种指针的用法》 设计模式是软件工程中的宝贵经验总结,它们代表了在特定上下文中解决常见问题的最佳实践。C++11标准引入了许多新特性,包括智能指针,这使得在C++中实现设计模式更加高效且...
动态规划法和备忘录法是解决这类问题的有效策略,尤其适用于C++编程语言。 **矩阵连乘** 矩阵连乘是指将一系列矩阵按特定顺序相乘,其结果矩阵等于连续乘以这些矩阵。如果直接计算n个矩阵的乘积,复杂度为O(n^3),...
C++中,通常利用共享指针和内部状态外部化来实现。 10. 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。C++中,可以通过智能指针或者类的继承实现。 11. 模板方法模式(Template Method):...
C++中通过继承和包含原类指针实现。 8. 代理模式:为其他对象提供一种代理以控制对这个对象的访问。C++中可使用智能指针或继承实现。 9. 外观模式:提供一个统一的接口,用来访问子系统中的一组接口。C++中使用类...
在C语言中,可以通过结构体和函数指针来实现备忘录模式。 **解析器模式** 解析器模式给定一组描述语言的文法规则,构造一个解释器。在C语言中,可以通过递归函数和字符串处理函数来实现解析器模式。 **命令模式** ...
C++中通常使用智能指针和友元机制来实现对对象状态的保存和恢复。 6. **访问者模式(Visitor)**:在不修改对象结构的前提下,为对象添加新的操作。C++中,访问者模式通过定义访问者接口,让元素接受访问者的访问,...
- 学习智能指针(auto_ptr, unique_ptr, shared_ptr)的使用,以避免内存泄漏。 5. **STL(Standard Template Library)** - STL是C++标准库的一部分,包括容器(如vector, list, map)、迭代器、算法和函数对象...
在C++中,策略模式常通过指针或智能指针引用策略对象,实现策略的动态选择。 7. **组合模式(Composite Pattern)** 组合模式将对象组织成树形结构,允许用户对单个对象和组合对象统一处理。C++中可以利用继承和多态...
2. 迭代器:类似于指针,但比指针更强大,可以用于遍历容器中的元素。迭代器有输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器等五种类型,每种类型对应不同的操作能力。 3. 算法:STL提供了一...