typedef 与指针、多维数组
1.在typedef中使用指针往往会带来意外的结果。如下:
typedef string *pstring;
const pstring cstr;
绝大数人刚开始都会认为cstr是一种指针,它指向const对象,即const pstring cstr 等价于const string *cstr,其实,这是不对的,错误的原因在于单纯地将typedef当做文本扩展了。
首先,我们要认识到pstring它是一个类型,表示的是指向string的指针。声明const pstring时,const修饰的是pstring这个类型本身(修饰的是指针),两者结合起来,即表示指向string的const指针这种类型。最后用const pstring类型来修饰标识符cstr,表明cstr是一个指向string的const指针。原定义可写为:string *const cstr。
其实,我们不需要每次都分析的这么痛苦,因为,在C++中const限定符既可以放在类型前,也可以放在类型后:
string const s1; // s1 and s2 have same type,
const string s2; // they're both strings that are const
所以,下次遇到这样不确定的类型判断时,就const放在诸如pstring类型的后面即可,转换为pstring const cst;
2.用typedef简化指向多维数组的指针
typedef类型定义可使指向多维数组元素的指针更容易读、写和理解。以下程序用typedef为数组ia的元素类型定义新的类型名:
int ia[][];
typedef int int_array[];
int_arry *ip = ia;
typedef 与指针、多维数组的更多相关文章
- C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com
原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...
- C++笔记-数组指针/二维数组转换指针
参考资料: 1. 作者 BensonLaur :https://www.cnblogs.com/BensonLaur/p/6367077.html 2. https://blog.csdn.net/ ...
- C-指针,二级指针,二维数组作为函数参数使用,C语言链表(详解)
一级指针 int *p; //表示定义一个int型(4字节)的指针p &p //表示p自身的地址位置 p ...
- int (*p)[4] p 是二级指针 二维数组 二级指针 .xml
pre{ line-height:1; color:#2f88e4; background-color:#e9ffff; font-size:16px;}.sysFunc{color:#3d7477; ...
- c语言中数组,指针数组,数组指针,二维数组指针
1.数组和指针 ] = {,,,,};// 定义数组 // 1. 指针和数组的关系 int * pa = array; pa = array; // p[0] == *(p+0) == array[0 ...
- C语言指针系列 - 一级指针.一维数组,二级指针,二维数组,指针数组,数组指针,函数指针,指针函数
1. 数组名 C语言中的数组名是一个特殊的存在, 从本质上来讲, 数组名是一个地址, 我们可以打印一个指针的值,和打印一个数组的值来观察出这个本质: int nArray[10] ={ 0 }; in ...
- C++ 指针二维数组, C++二维指针数组笔记
C++ 二维动态数组 一. 已知第一维 #include <iostream> using namespace std; int main(int argc, char const *ar ...
- c++指针二维数组
; int** G; //初始化 G = new int*[N]; ; i < N; i++) G[i] = new int[N]: //删除 ; i < N; i++) delete[] ...
- [C++]数组与指针[二维数组与指针]
随机推荐
- CHARINDEX
实现查询条件多个值的或的关系 Select Id,Name from CustTable where CharIndex( CustTable.Name, 'ACDE,BEX,CCC')>0 C ...
- Idea CheckStyle 安装
Idea CheckStyle 安装 1. 安装CheckStyle a) 下载idea checksytle 插件 b) 打开Idea的 Settings –>Plugi ...
- win 7,win2008 无法给新建用户完全权限
明明把这个用户添加到管理员组了啊,为什么在运行一些程序时老是提示没有权限,实在是郁闷.在网上Google 了半天也没找到个所以然来. 后来发现是系统用户帐户控制搞的鬼,到 控制面板/用户帐户和家庭安全 ...
- 初学Python之字符串操作
字符串.replace() phone_number='158-8888-8888' hide_number=phone_number.replace(phone_number[:9],'*'*9) ...
- HttpClientUtils
import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.List; import ...
- HL7 2.6解析转XML(C#版)
HL7 2.6解析转XML(C#版) 项目中需要解析HL7,所以在网上找到解析代码,但错误很多,所以我修改了一下,测试好用. using System; using System.Collection ...
- Druid Monitor监控JavaSE,杀cmd端口进程
1.需要在启动命令添加相关jvm参数 -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname -Dcom.sun.management.jm ...
- final的使用
final对基本类型,限定常量. final对对象的引用,不可引用其他对象. final的字段,必须在定义时或者构造器内完成初始化.构造内才完成初始化的Blank Final(空白final). cl ...
- 封装、调用ajax
1.JavaScript代码 //封装ajaxfunction ajax(obj) { var xhr = new createXHR(); obj.url = obj.url + '?rand=' ...
- 如何在一台电脑上开启多个tomcat
大家基本上都只在一台电脑上面启动一个Tomcat,而启动多个Tomcat会提示报错等相关故障.而假如调试负载均衡及集群的时候,需要在一台电脑上面开启多个Tomcat,那么怎么开启呢? 首先需要知道的是 ...