可恶的C指针运算左右结合性质

Posted 之墨_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可恶的C指针运算左右结合性质相关的知识,希望对你有一定的参考价值。

可恶的指针
#include<bits/stdc++.h>
using namespace std;
int main ()

int i ;
int * q ;
int * a [10];
int * (* b [10]) [10];
int * (*(* p ) [10]) [10];
i = 100; q = & i ; a [1] = q ; b [1] = & a ; p = & b ;
cout <<p[0][1][0][1][0]<< endl ; // 输出 100
cout <<*(*(*(*(*p+1))+1))<< endl ; // 输出 100
 // 程序

a a a是一个具有 10 10 10个元素的数组,数组中每一个元素都是一个指向整形元素的指针
b b b是一个具有 10 10 10个元素的数组,该数组的每一个元素都是一个指针,并且指向一个具有 10 10 10个元素的数组,该数组的每一个元素都是一个指向整型数
p p p是一个指针,其指向一个具有 10 10 10个元素的数组,该数组每一个元素都是一个指针,指向一个具有 10 10 10个元素的数组,该数组每个元素都是一个指向整型元素的指针。

i = 100; q = & i ; a [1] = q ; b [1] = & a ; p = & b ;
p[0][1][0][1][0]
*(*(*(*(*p+1))+1))
p[0]=*p → p所指向的地址的内容即b的地址
p[0][1]=*(*p+1) → b的地址向右移一位容即b[1]对应的内容:&a
p[0][1][0]=*(*(*p+1)) → a的地址对应的内容
p[0][1][0][1]=*(*(*(*p+1))+1) → a的地址向右移一位即a[1]对应的内容:q=&i
p[0][1][0][1][0]=*(*(*(*(*p+1))+1)) → i地址对应的内容即100

左结合性右结合性

以上是关于可恶的C指针运算左右结合性质的主要内容,如果未能解决你的问题,请参考以下文章

C语言中,哪些运算符具有左结合性?哪些具有右结合性?

c指针是个啥

C语言运算符优先级

C语言中 优先级相同是运算符的先后怎么区分

深入了解C指针

GTK+2.0学习——C指针回顾