CC++ 如何确定一个变量的类型(恶心的指针)
如何确定一个变量的类型
1.如果一个变量声明中没有括号
如果一个变量声明中没有括号,从右往左读,离变量名最近的修饰符确定这个变量的类型。如果最近的修饰符是指针或引用,那么除了这个修饰符,其余部分(也从右往左读)确定这个指针(引用)指向什么类型。
int a; //整数类型
int *p;//从右往左读,第一个修饰符是*,说明p是指针,剩下的修饰符只有int,那么就是指向int的指针
int **p;//同理解释
如何声明一个数组的指针?注意,数组和指针并不等价,所以数组的指针不是二级指针。
int arr[10];
int *parr[10] = &arr; //对吗?
我们从右往左读,第一个遇到的修饰符是[10],说明啥?说明parr是一个数组,剩下还有int*,那就说明,parr是int*的数组。所以上述代码会报错。既然从右往左读,那么下边的代码怎么样?
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++ 如何确定一个变量的类型(恶心的指针)的更多相关文章
- javascript中检测一个变量的类型
/** * 怎么检测一个变量的类型? * 在js中检测对象类型主要有三种:typeof, instanceof, constructor, 这几种都可以检测对象的类型. * 另外还可以适应jQuery ...
- JAVA中如何取得一个变量的类型
class Test {public static void main(String[] args) {int i=1;System.out.println(getType(i));}public s ...
- 判断一个变量的类型Object.prototype.toString.call
var num = 1;alert(Object.prototype.toString.call(num)); // [object Number]var str = 'hudidit.com';al ...
- 【react】利用prop-types第三方库对组件的props中的变量进行类型检测
1.引言--JavaScript就是一个熊孩子 1.1对于JSer们来说,js是自由的,但同时又有许多让人烦恼的地方.javascript很多时候就是这么一个熊孩子,他很多时候并不会像C和java ...
- Python的变量以及类型
1.程序是用来处理数据的,变量就是用来存储数据的 num1 = 100 2.为了更充分的利用内存空间以及更有效率的管理内存,变量是有不同的类型 3.怎样知道一个变量的类型呢? 3.1 在python ...
- Python变量以及类型
变量的定义 在程序中,有时我们需要对2个数据进行求和,那么该怎样做呢? 大家类比一下现实生活中,比如去超市买东西,往往咱们需要一个菜篮子,用来进行存储物品,等到所有的物品都购买完成后,在收银台进行结账 ...
- 前端-JavaScript1-5——JavaScript之变量的类型
5.1 概述 基本类型5种 number 数字类型 string 字符串类型 undefined undefined类型,变量未定义时的值,这个值自 ...
- 自学Python1.7-python变量以及类型
自学Python之路 自学Python1.7-python 变量以及类型 1 变量是什么 变量是容器 2 变量的作用 存储数据到内存 3 为什么要用变量 存储数据方便后面引用 4 变量定义的规范 变量 ...
- Python之变量以及类型
为了更充分的利用内存空间以及更有效率的管理内存,变量是有不同的类型的,如下所示: 怎样知道一个变量的类型呢? 在python中,只要定义了一个变量,而且它有数据,那么它的类型就已经确定了,不需要咱们开 ...
- Javascript如何判断一个变量是数字类型?
isNaN()不能判断一个变量是否为数字类型,isNaN(123)值为false,isNaN('123')值也为false.isNaN() 的实际作用跟它的名字isNaN并不一致,isNaN(NaN) ...
随机推荐
- 【树】N叉树的遍历【力扣589、力扣590】超详细的解释和注释
说在前面 欢迎朋友们来到我的博客. 今天我们的重点是,N叉树的遍历. 今天,博主就带来两道经典的题目,领着大家理解N叉树的前序遍历和后序遍历! 当然,还想学习其它算法的朋友们,可以通过订阅博主的算法专 ...
- (Python)每日代码||2024.1.17||函数中给列表形参默认值时,该默认列表在函数中的改变会保留下来
def f(x,li=[1]): print(id(li)) li.append(x) print(li) f('a')#第一次调用函数 print() f('b')#第二次调用函数 print() ...
- <semaphore.h> 和 <sys/sem.h> 的区别
<sys/sem.h>为 XSI(最初是 Unix System V)信号量提供接口. 这些不是基本 POSIX 标准的一部分(它们在 XSI 选项中,主要是为了传统的 Unix 兼容性) ...
- Delphi Vista,Win7,Win8 的 Uac,管理员身份运行
要用就用下面我自己总结的官方的做法: 1.首先搜到delphi 自带的manifest,然后在其基础上改一个单词 2.将里面的asInvoker改为requireAdministrator 3.修改为 ...
- 【LGR-153-Div.2】梦熊联盟 8 月月赛 Ⅳ & Cfz Round 1 & 飞熊杯 #1
[LGR-153-Div.2]梦熊联盟 8 月月赛 Ⅳ & Cfz Round 1 & 飞熊杯 #1 \(T1\) luogu P9577 「Cfz Round 1」Dead Cell ...
- Java设计模式-装饰者模式Decorator
介绍 装饰者模式的核心思想是通过创建一个装饰对象(即装饰者),动态扩展目标对象的功能,并且不会改变目标对象的结构,提供了一种比继承更灵活的替代方案.需要注意的是,装饰对象要与目标对象实现相同的接口,或 ...
- ubuntu 20.4安装docker
ubuntu 20.4 安装docker 目录 查看版本并升级套件 安装必要软件 添加阿里云的GPG密钥,命令设置存储库 执行安装,查看版本 查看版本并升级套件 cat /proc/version L ...
- 详解SSL证书系列(1)什么是SSL证书?
你一定遇到过这种情况,打开一个网站,浏览器弹出警告"您与此网站之间建立的连接不安全.由于此连接不安全,因此信息(如密码或信用卡)不会安全地发送到此网站,并且可能被其他人截获或看到" ...
- core-js/modules/es7.arrat......................报错
拉入代码之后出现如图提示,导致原因是因为core-js版本太高,可以用cnpm install core-js@2成功解决,安装一个项目前最后将node-moudel删除,重新安装
- 第129篇:JS模块化开发
好家伙,本篇为<JS高级程序设计>第二十六章"模块"学习笔记 JS开发会遇到代码量大和广泛使用第三方库的问题. 解决这个问题的方案通 常需要把代码拆分成很多部分,然后再 ...