我在访问指针数组中的元素时有点困惑。假设我有一个指针 int **score_cards ,它指向一个大小为 n 的 int 指针数组。我想找到数组元素所指向的整数的总和。
我正在考虑这样做:
int sum = 0;
int i;
for(i = 0;i<n;i++){
sum = sum + *(*score_card+ i);
}
Run Code Online (Sandbox Code Playgroud)
但这是错误的,而以下是正确的:
int sum = 0;
int i;
for(i = 0;i<n;i++){
sum = sum + *(*(score_card + i));
}
Run Code Online (Sandbox Code Playgroud)
现在,我有两个问题,既然 *score_cards 指向数组的第一个元素,那么第 i 个元素不是 *score_cards + i 吗?即第一个元素的地址+ i?另外,为什么我们将 i 加 1,而不是 sizeof(*int) ?提前致谢!
a[b]请记住,和 的简写语法*(a + b)是完全相同的。您不应该使用后者,因为它有点难以辨认。
因为 *score_cards 指向数组的第一个元素
这是不正确的。score_cards指向数组的第一个元素,*score_cards是数组的第一个元素。因此i数组的第 -th 元素是*(score_cards + i)或等于score_cards[i]。
另外,为什么我们将 i 加 1,而不是 sizeof(*int)?
在 C 中,当将整数添加到指针时,该整数会隐式乘以所指向类型的大小。这样,当a是某种类型的对象数组时,a[i]就是i该数组的第一个元素。