Int * t;这t [* t] - 类型定义

时间:2014-12-07 20:54:19

标签: c++ arrays pointers

我几天来一直在更新服务器项目的代码。 我发现了一条我无法理解的行(已被评论过)

首先,我得到:

int *t;

然后我得到了这个(评论):

t[*t];

这个" t [* t]"的类型是什么?

5 个答案:

答案 0 :(得分:2)

类型是int左值。我们有两个部分:

*t             // this is an int
t[ some int ]  // this is standard array indexing

或者举个简单的例子:

int array[] = {1, 2, 3, 4};
int* t = array;

使用该设置:

t[*t] == t[1] == 2

或者:

t[*t] = 7;

// now array[] holds {1, 7, 3, 4}

答案 1 :(得分:1)

类型为int

*t相当于t[0],因此您的表达式等同于以下内容:

t[*t] == t[t[0]] == t[offset](如果您考虑offset = t[0]

答案 2 :(得分:0)

有时代码是通过键入符号的数量来估算的。所以我会写一个更令人困惑的代码,但有更多的字符,如:)

( t + *t )[*t];

相对于你的例子

*t是存储在t中的某个整数,*t相当于t[0]。因此,在表达式t[*t]中,使用了指针算法

t + *t

t + t[0]

给出一些新的指针然后被解除引用

*( t + *t )

答案 3 :(得分:0)

根据语言的定义,假设t是指针,表达式t[*t]完全等同于表达式*(t + *t)

要分析该表达式的类型,让我们从内到外看一步步骤。我将用«type»替换每个表达式的整个类型。

由于t的类型为int*,我们有*(«int*» + *«int*»)

取消引用int*会得到一个类型为int的左值。因此,我们得到*(«int*» + «int»)

现在向指针添加一个整数再次给出了一个相同类型的指针,因此表达式减少到*«int*»

但是,再次,只是取消引用指向int的指针,因此表达式的最终类型是左值int

答案 4 :(得分:0)

operator[] 始终int*会返回int
由于*t只返回t的第一个元素,t[*t]t的第一个元素所指向的t的元素。

示例:

int *t;
t=new int[5];
for(int i=0;i<5;++i){
    t[i]=i+1;
}           // t now points to {1,2,3,4,5}
t[*t];      // <--- What does this evaluate to?

在这种情况下,t[*t]将是2.
由于*t为1,t[1]是数组中的第二个元素,即2。