0

这是我看不懂的书中的一个问题

int ia[] = { 10, 12, 13 };
char ca[] = { ’a’, ’b’, ’c’ };
char st[] = "abc";

如果我没记错的话,我们已经声明了 int 和 chars 数组。但随后的问题要求评估几个表达式(包括答案​​)。我不明白以下表达:

(*ia)+1 => 11
*(ca+2) => c
*(st+3) => \0

我不明白这是如何工作的。星号不是与指针一起使用来尊重它们吗?或声明一个指针变量?它在这里做什么?这些答案是怎么来的?

对不起,我对 C 很陌生

4

2 回答 2

4

在大多数表达式上下文中,数组“衰减”为指向其第一个元素的指针(sizeof 的参数是一个主要例外)。这些表达式是等价的:

 *(a+b) === a[b] === b[a]

所以

(*ia)+1 is ia[0]+1
*(ca+2) is ca[2]
*(st+3) is st[3]
于 2013-09-30T00:22:08.503 回答
1
(*ia)+1 => 11

该表达式表示数组ia的索引 0 处的值,即 10,然后加 1 为 11。 ia是数组名称,也是指向数组中第一个元素的指针,因此 (*ia) 只是指向的值由ia表示,即 10

*(ca+2) => c

这意味着,将 2 添加到指向数组ca的第一个元素的指针,然后得到值是 'c'

由于ca是一个字符指针,加 2 会将指针移动 2 个字符,所以它现在指向 'c'

*(st+3) => \0

该表达式将指向数组st中第一个字符的指针移动3,使其到达空终止字符。

于 2013-09-30T00:24:16.177 回答