如何确定一个变量的类型

1.如果一个变量声明中没有括号

如果一个变量声明中没有括号,从右往左读,离变量名最近的修饰符确定这个变量的类型。如果最近的修饰符是指针或引用,那么除了这个修饰符,其余部分(也从右往左读)确定这个指针(引用)指向什么类型。

int a; //整数类型
int *p;//从右往左读,第一个修饰符是*,说明p是指针,剩下的修饰符只有int,那么就是指向int的指针
int **p;//同理解释

如何声明一个数组的指针?注意,数组和指针并不等价,所以数组的指针不是二级指针。

int arr[10];
int *parr[10] = &arr; //对吗?

我们从右往左读,第一个遇到的修饰符是[10],说明啥?说明parr是一个数组,剩下还有int*,那就说明,parrint*的数组。所以上述代码会报错。既然从右往左读,那么下边的代码怎么样?

int[10] *parr = &arr;

理论上来讲,这确实是一个数组的指针(从右往左读)。但不幸的是,C/C++语法并不允许这样。那还有没有办法?

2.变量声明中有括号

变量声明中有括号,优先括号内右往左读,其余的和没有括号的情况一样。

int (*parr)[10] = &arr;//正确

先读括号内,parr是个指针,剩下的修饰符还有int[10](从右往左读),那么parr就是指向int[10]的指针。ohhhhhhhhhhhhhhhhhhhhhhhhhhhh!!!!!!!!!!!!!!!!!

3.检测一下(逐渐变态···

请问下边的p和pp是什么类型?

int *(*p)[4];
int (*(*p))[2][3];

首先看括号,确定p是一个指针。剩下的从右向左读int*[4],这是一个数组,数组中的每个元素都是int*,所以,p是一个指针,指向一个int*数组。

再看下一个,好像有点变态······

先看最里边的括号,p是一个指针,再看外边的括号,除去(*p),外边括号里就剩下*,所以p是指向指针(命名为t)的指针。那么t指向哪里?看剩下的int[2][3],结果很清楚了。p->t->二维数组.

4.总结

总体从右向左看,有括号先看括号里,离变量名最近的修饰符确定了变量的类型。

完。

ps:建议结合我这篇文章看《C++ const与指针》,更加酸爽!

CC++ 如何确定一个变量的类型(恶心的指针)的更多相关文章

  1. javascript中检测一个变量的类型

    /** * 怎么检测一个变量的类型? * 在js中检测对象类型主要有三种:typeof, instanceof, constructor, 这几种都可以检测对象的类型. * 另外还可以适应jQuery ...

  2. JAVA中如何取得一个变量的类型

    class Test {public static void main(String[] args) {int i=1;System.out.println(getType(i));}public s ...

  3. 判断一个变量的类型Object.prototype.toString.call

    var num = 1;alert(Object.prototype.toString.call(num)); // [object Number]var str = 'hudidit.com';al ...

  4. 【react】利用prop-types第三方库对组件的props中的变量进行类型检测

    1.引言--JavaScript就是一个熊孩子   1.1对于JSer们来说,js是自由的,但同时又有许多让人烦恼的地方.javascript很多时候就是这么一个熊孩子,他很多时候并不会像C和java ...

  5. Python的变量以及类型

    1.程序是用来处理数据的,变量就是用来存储数据的  num1 = 100 2.为了更充分的利用内存空间以及更有效率的管理内存,变量是有不同的类型 3.怎样知道一个变量的类型呢? 3.1 在python ...

  6. Python变量以及类型

    变量的定义 在程序中,有时我们需要对2个数据进行求和,那么该怎样做呢? 大家类比一下现实生活中,比如去超市买东西,往往咱们需要一个菜篮子,用来进行存储物品,等到所有的物品都购买完成后,在收银台进行结账 ...

  7. 前端-JavaScript1-5——JavaScript之变量的类型

    5.1 概述 基本类型5种 number          数字类型 string             字符串类型 undefined      undefined类型,变量未定义时的值,这个值自 ...

  8. 自学Python1.7-python变量以及类型

    自学Python之路 自学Python1.7-python 变量以及类型 1 变量是什么 变量是容器 2 变量的作用 存储数据到内存 3 为什么要用变量 存储数据方便后面引用 4 变量定义的规范 变量 ...

  9. Python之变量以及类型

    为了更充分的利用内存空间以及更有效率的管理内存,变量是有不同的类型的,如下所示: 怎样知道一个变量的类型呢? 在python中,只要定义了一个变量,而且它有数据,那么它的类型就已经确定了,不需要咱们开 ...

  10. Javascript如何判断一个变量是数字类型?

    isNaN()不能判断一个变量是否为数字类型,isNaN(123)值为false,isNaN('123')值也为false.isNaN() 的实际作用跟它的名字isNaN并不一致,isNaN(NaN) ...

随机推荐

  1. 【STL源码剖析】list::sort真的好用吗?Centos7-Linux环境g++Release下vector数组排序和list排序效率测试【超详细的注释和解释】

    说在前面的话 在使用C++的标准模板库的一些容器时,我们难免会遇到给序列排序的问题. 在学习list的时候,我们可能会了解到,algorithm::sort其实不是万能的. 当我们要给list排序的时 ...

  2. PHP实现字符串反转

    方法一 用自带的函数strrev echo strrev('hello'); 方法二 自写循环方法 $str = 'hello'; $i = strlen($str); $newStr=''; whi ...

  3. cs50ai2

    cs50ai2-------Uncertainty cs50ai2-------Uncertainty 基础知识 课后题目 代码实践 学习链接 总结 基础知识 在这节课中,前面主要介绍了一些概率论的基 ...

  4. Linux RDP 会话中无法打开VSCode 解决办法

    github issue: VS Code "and still" won't open in a Linux xrdp session Workaround- Linux RDP ...

  5. DoraCloud桌面模板制作教程

    模板制作是桌面云部署时的一项重要工作.模板的质量直接影响到虚拟桌面业务运行的稳定性.安全性和用户体验.制作模板需要完成如下一些工作: 安装Windows桌面操作系统. 安装虚拟化平台相关的半虚拟化驱动 ...

  6. LGV引理

    LGV引理是用来统计DAG中固定若干起点和终点情况下的选择不相交链的方案数的. 同样用来优化计数问题,但是比Pólya定理友好多了,这也就是为什么它能够被直接糊到NOI考场上. 对于一张DAG,每条边 ...

  7. NC16544 简单环

    题目链接 题目 题目描述 给定一张n个点m条边的无向图,求出图中所有简单环的数量.(简单环:简单环又称简单回路,图的顶点序列中,除了第一个顶点和最后一个顶点相同外,其余顶点不重复出现的回路叫简单回路. ...

  8. JavaScript选择器

    Js选择器 JS选择器常用的有getElementById().getElementsByClassName().getElementsByName().getElementsByTagName(). ...

  9. JS笔记:方法两次调用,执行不同分支(公共变量,闭包,类三种方法实现)

    好家伙,   当我们对一个方法进行两次调用,我们希望第一次执行A分支,第二次执行B分支,该怎么做? 这意味着在连续的两次调用中,方法的执行逻辑会交替执行不同的分支. 方法一:公共变量 let flag ...

  10. 【Azure 应用服务】在创建App Service时,遇见“No available instances to satisfy this request. App Service is attempting to increase capacity.”错误

    问题描述 在创建新的App Service,遇见了资源不满足当前需求的提示.详细消息为: "Code": "Conflict","Message&qu ...