指向C中int指针数组的指针

指向C中int指针数组的指针,c,arrays,pointers,C,Arrays,Pointers,在访问指针数组中的元素时,我有点困惑。假设我有一个指针int**score\u cards,它指向一个大小为n的int指针数组。我想找到数组元素指向的整数之和 我想做: int sum = 0; int i; for(i = 0;i<n;i++){ sum = sum + *(*score_card+ i); } int和=0; int i; 对于(i=0;i得分卡指向数组的第一个元素,*得分卡是数组的第一个元素 指针算法知道大小,因此不需要缩放到类型的大小。请记住,*(a+b)

在访问指针数组中的元素时,我有点困惑。假设我有一个指针int**score\u cards,它指向一个大小为n的int指针数组。我想找到数组元素指向的整数之和

我想做:

int sum = 0;
int i;
for(i = 0;i<n;i++){
    sum = sum + *(*score_card+ i);
}
int和=0;
int i;

对于(i=0;i得分卡指向数组的第一个元素,*得分卡是数组的第一个元素


指针算法知道大小,因此不需要缩放到类型的大小。

请记住,
*(a+b)
存在缩写语法
a[b]
,并且完全相同。您不应该使用后者,因为后者有点难以辨认

因为*score_卡指向数组的第一个元素

这是不正确的。
score\u cards
指向数组的第一个元素,
*score\u cards
是数组的第一个元素。因此数组的
i
-第四个元素是
*(score\u cards+i)
或同样
score\u cards[i]

另外,为什么我们将i增加1,而不是sizeof(*int)

在C语言中,当向指针添加一个整数时,该整数隐式地乘以指向的类型的大小。这就是当
a
是某种类型的对象数组时,
a[i]
是该数组的第i个元素。

*分数卡不指向数组的第一个元素-它是数组的第一个元素。因此,
*分数卡+5
将是数组的第一个元素加上五个元素-而不是数组的第六个元素


当你向指针添加一个数字时,编译器会自动将该数字乘以所指向对象的大小。因此
score\u card+i
“实际上”是指
score\u card+i*sizeof(*score\u card)
(当然,如果你在程序中编写了这个数字,它最终会表现得像
score\u card+i*sizeof(*score\u card)*sizeof(*score_card)
这不是你想要的)

为什么你要避免索引表达式?请记住,
a[b]
被定义为等于
*(a+b)
。我知道订阅更清晰,但我想了解指针。@NidhiKantak这对我来说是一种乐趣。
int sum = 0;
int i;
for(i = 0;i<n;i++){
    sum = sum + *(*(score_card + i));
}