CC++ 如何确定一个变量的类型(恶心的指针)

如何确定一个变量的类型

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*数组。

CC++ 如何确定一个变量的类型(恶心的指针)

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

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

4.总结

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

完。

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

原文链接: https://www.cnblogs.com/hellozhangjz/p/12537123.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    CC++ 如何确定一个变量的类型(恶心的指针)

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/194640

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午6:45
下一篇 2023年2月12日 下午6:45

相关推荐