如何确定一个变量的类型

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. GA算法|遗传算法|SYSU期末课程设计|Python+Matlab实现|超完备代码实现

    前言 那么这里博主先安利一下一些干货满满的专栏啦! Linux专栏https://blog.csdn.net/yu_cblog/category_11786077.html?spm=1001.2014 ...

  2. P4396 [AHOI2013] 作业 题解

    题目链接:作业 其实可以类似"HH的项链"转化为偏序问题再 cdq 分治.不过这题感觉莫队然后值域分块很好写啊,基本不用动脑. 考虑查询的两个信息: \(a \le x\le b\ ...

  3. CommentTest

    public class CommentTest{ /* 这是多行注释 可以声明多行注释的信息 1. Java注释的种类: 单行注释,多行注释,文档注释(Java特有) 2. 单行注释,多行注释 ① ...

  4. ASP.NET Core分布式项目实战(oauth2与open id connect 对比)--学习笔记

    任务14:oauth2与open id connect 对比 以微博开放平台为例(微博登录接入--授权机制): https://open.weibo.com/wiki/授权机制 可以看到微博登录接入使 ...

  5. Google搜索操作符:让你秒变搜索专家

    搜索引擎对互联网的重要性不言而喻,不过,随着ChatGPT及其类似AI工具的推出,对搜索引擎带来了前所未有的挑战. 因为ChatGPT具有自然语言处理能力,能够更好地理解用户的搜索意图,提供更准确.更 ...

  6. Object.definePropety

    defineProperty Object.defineProperty()方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象,也就是说,该方法允许精确地添加或修改对象的属 ...

  7. Vue实现简单计算器功能

    知识点: v-model双向绑定 v-on事件绑定 实现效果 源码 <!DOCTYPE html> <html lang="en"> <head> ...

  8. 案例分享:Qt出版社书籍配套U盘资源播放器软件定制(脚本关联播放器与资源文件,播放器,兼容win7,win10和mac)

    红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术.树莓派.三维.OpenCV.OpenGL.ffmpeg.OSG.单片机.软硬结合等等)持续更新中-(点击传送门) 合作案例专栏:案例分享(体 ...

  9. 【LeetCode动态规划#16】矩阵的最小路径和、三角形的最小路径和

    矩阵的最小路径和 给定一个包含非负整数的 *m* x *n* 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:一个机器人每次只能向下或者向右移动一步. 示例 1 ...

  10. [App Service for Windows]通过 KUDU 查看 Tomcat 配置信息

    问题描述 在App Service 中选择了Java Tomcat后,如何查看Azure App Service的Tomcat的配置信息呢? 问题解答 可以通过以下的 3个步骤查看: 第一步:登录 K ...