在访问指针数组中的元素时,我有些困惑。假设我有一个指针int ** score_cards,它指向大小为n的int指针数组。我想找到数组元素所指向的整数之和。
我正在考虑这样做:
int sum = 0;
int i;
for(i = 0;i<n;i++){
sum = sum + *(*score_card+ i);
}
但这是错误的,而以下是正确的:
int sum = 0;
int i;
for(i = 0;i<n;i++){
sum = sum + *(*(score_card + i));
}
现在,我有两个问题,因为* 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
-th元素就是。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句