c++ primer学习笔记(8)-指针
2011-02-24 21:30 Clingingboy 阅读(421) 评论(0) 编辑 收藏 举报理解这一点非常之关键
看例子.
string s("hello world");
string *sp = &s; // sp holds the address of s
- 首先定义了一个s的字符串
- 从第2行开始从右往左看.
- &表示取地址操作符
- *表明变量是一个指针变量
- 指针用于保存一个对象的地址
牢记以上几点
指针的定义和初始化
1.用*符号标识变量
vector<int> *pvec; // pvec can point to a vector<int>
int *ip1, *ip2; // ip1 and ip2 can point to an int
string *pstring; // pstring can point to a string
double *dp; // dp can point to a double
2.声明风格
(1)
int *ip1, *ip2; // ip1 and ip2 can point to an int
(2)
double dp, *dp2; // dp2 is a ponter, dp is an object: both type double
(3)
string* ps; // legal but can be misleading
(4)
string* ps1, ps2; // ps1 is a pointer to string, ps2 is a string
(5)
string* ps1, *ps2; // both ps1 and ps2 are pointers to string
风格的选择,不要让这么多声明方式混淆了你的思想,你可以选择你喜欢的方式
3.指针状态
- 保存对象地址
- 指向某个对象后面的另一对象
- 0值
指针赋值
看下面代码
int ival;
int zero = 0;
const int c_ival = 0;
int *pi = zero; // error: pi initialized from int value of ival
pi = zero; // error: pi assigned int value of zero
pi = c_ival; // ok: c_ival is a const with compile-time value of 0
pi = 0; // ok: directly initialize to literal constant 0
1.不可以直接赋变量,即使值(非const状态下)为0
2.可以直接赋0或者const为0的变量
指针初始化或赋值必须为同类型
double dval;
double *pd = &dval; // ok: initializer is address of a double
double *pd2 = pd; // ok: initializer is a pointer to double
int *pi = pd; // error: types of pi and pd differ
pi = &dval; // error: attempt to assign address of a double to int *
void*指针
可保存任意类型对象的地址
double obj = 3.14;
double *pd = &obj;
// ok: void* can hold the address value of any data pointer type
void *pv = &obj; // obj can be an object of any type
pv = pd; // pd can be a pointer to any type
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现