C++指针(这是一篇正经知识总结) |
您所在的位置:网站首页 › 指针转换类型 › C++指针(这是一篇正经知识总结) |
Reference《C++ Primer》(第5版)《明解C++》前言背景 C++语言中有几种复合类型:引用、指针、... 复合类型指的是基于其他类型定义的类型。 变量定义:类型说明符(type specifier) 一个或者多个变量名组成的列表。 通俗来说变量声明就是一个基本数据类型和紧随其后的一个声明符列表组成。 其中变量名由逗号分割,以分号结束。 // 声明符就是变量名 变量的类型就是声明的基本数据类型 int sum = 0, value, units_sold = 0; Sales_item item; string s("abcdefs");复杂的声明符是基于基本数据类型得到的更复杂的类型,并把它指定给变量。 指针用于间接的操作对象、高效的处理数组、动态创建对象等。 1、C++基础中复合类型的指针定义指针(pointer)是"指向(point to)"另外一种类型的复合类型。 定义指针类型的方法将声明符写成*d的形式,其中d是变量名。在一条语句内声明多个指针对象必须每个变量名前都有*。 int *ip1, *ip2; // ip1和ip2都是指向int类型对象的指针 double dp, *dp2; // dp2是指向double型对象的指针, dp是double型对象获取对象的地址 (取址运算符 &)指针存放某个对象的地址,需要用取地址符(操作符 &)获取地址。 符号 & 的作用根据上下文而不同: 作为一元运算符的取址运算符:表达式 &x ()作为二元运算符的按位与运算符:表达式 x & y用于声明引用的分隔符:声明 int &ref;// 正确示例 double dval; double *pd = &dval; double *pd2 = pd; // 错误示例 int *pi = pd; // 错误:指针pi的类型和pd的类型不匹配 pi = &dval; // 错误:试图把double型对象的地址赋给int型指针 // 说明不同类型的指针之间不能赋值 指针值指针的值(即地址)有4种状态: (1)指向一个对象(2)指向紧邻对象所占空间的下一个位置(3)空指针,意味着指针没有指向任何对象(4)无效指针容易发现错误的情况就是拷贝或以其他方式访问无效指针,编译器不负责检查此类错误,此问题类似试图使用没有初始化的变量。访问无效指针的后果很严重。 利用指针访问对象 (解引用运算符 *)如果指针指向了一个对象,则允许使用解引用符(操作符 *)来访问对象。 对指针解引用会得到所指的对象,如果给解引用的结果赋值,就是给指针所指的对象赋值。 解引用运算符 (*)的操作数所指的也可以不是对象,而是函数。 符号 * 根据上下文有以下作用: 作为一元运算符的解引用运算符:表达式 *p作为二元运算符的乘法运算符:表达式 x * y用来声明指针的分隔符:声明 int *p;int ival = 42; int *p = &ival; // p存放着ival的地址 或者说 p是指向变量ival的指针 cout |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |