我有这段代码,我想弄清楚第二行代码的作用。
static int table [][4]= {{1,2,3,4},{2,3,4,5},{3,4,5,6}};
int valore = *(*(table+2)+1);
printf("%d",valore);
我对 C 中的指针有基本的了解,你能解释一下第二行代码是做什么的吗?
table
是 3 个 4 的数组int
。
在表达式中使用数组时,它会被转换为指向其第一个元素的指针,除非:
sizeof
。&
。所以,在*(*(table+2)+1)
,table
被转换成一个指针到它的第一个元素,从而产生&table[0]
。然后我们有:
*(*(&table[0]+2)+1)
接下来,我们有加法&table[0] + 2
。这使用指针算法。将整数添加到指针(到数组中)将指针向后或向前移动多个元素。因此&table[0] + 2
产生一个指向 的指针table[2]
,即&table[2]
。然后我们有:
*(*(&table[2])+1)
不再需要内括号,所以我们有:
*(*&table[2]+1)
然后* &table[2]
是&table[2]
指向的东西,这意味着它是table[2]
:
*(table[2] + 1)
由于table
是 3 个 4的数组int
,因此table[2]
是4的数组int
。由于它是一个数组,它被转换为指向其第一个元素的指针,产生&table[2][0]
:
*(&table[2][0] + 1)
现在我们又有了指针算法。&table[2][0]
是一个指向数组元素 0 的指针table[2]
,所以加 1 产生一个指向元素 1 的指针&table[2][1]
:
*(&table[2][1])
同样,我们有不再需要的括号:
*&table[2][1]
最后,* &table[2][1]
是&table[2][1]
指向的东西,所以它只是:
table[2][1]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句