2014-12-07 102 views
0

我正在更新一个服务器项目的代码,因为天。 我发现了一个行,我无法理解(这是评论)Int * t;和这个t [* t] - 类型定义

首先,我得到:

int *t; 

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

t[*t]; 

什么的这种类型“t [* t]”

回答

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} 
+0

它也是完全不可读在第二元件。只是说。 (不是你的代码,'t [* t]')。 – keyser 2014-12-07 20:58:24

+0

@keyser:如果这是不可读的('t [* t]'),请等到最简单的模板或其他任何东西。 – Deduplicator 2014-12-07 21:00:53

+0

谢谢你的回答!但你如何得到int和int?因为我虽然类型是诠释? – John 2014-12-07 21:00:55

0

有时代码由估计键入符号的数量。所以,我会写一个更加混乱的代码,但有更多的字符,如:)

(t + *t)[*t]; 

相对于你的例子

*t是一些整数存储在t*t相当于t[0]。因此,在表达t[*t]那里使用指针运算

t + *t 

t + t[0] 

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

*(t + *t) 
1

类型是int

*t相当于t[0]因为这样你的表情相当于如下:

t[*t] == t[t[0]] == t[offset](如果你考虑​​)

0

由语言的定义,因为t是一个指针,表达t[*t]是完全等价的表达*(t + *t)

要分析该表达式的类型,让我们从内到外看一步一步。我会替换每个表达式整个类型被识别为«type»

由于tint*,我们有*(«int*» + *«int*»)

提领int*给出int类型的左值。因此我们得到*(«int*» + «int»)

现在,将一个整数添加到指针中会再次得到一个相同类型的指针,因此该表达式简化为*«int*»

但是,也就是说,只是取消指向int的指针,因此表达式的最终类型是左值int

0

int*operator[]总是返回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

相关问题