c++中用于计算平均值的数组指针
Pointer for array to calculate average in C++
我有一个关于c++指针的问题:
编写一个计算浮点数据数组平均值的函数:
double * a (int * size)
在函数中,使用指针变量(而不是整数索引)遍历数组元素。
我的解决方案是:
int main()
{
const int size = 5;
double num_array[] = {2,2,3,4,5};
double* a = num_array;
cout << average(a,size);
cout << endl;
system("PAUSE");
return 0;
}
double average(double* a,const int size)
{
double total = 0;
for (int count =0; count< size; count++){
total = total + *(a + count);
}
return total/size;
}
它工作得很好,但我对平均函数指针上的for循环有疑问。如果我将for循环中的语句替换为:
total = total + a*;
(我以为我们应该这样做,把数组中的所有数字加起来,但不幸的是,它给了我错误的答案)
那么*(a + count)是做什么的呢?如果可能的话,谁能简单地告诉我它是如何工作的?
a
是指向double
的指针。
如果你写*a
,这个指针得到解引用,你得到指针指向的数据,即double
值。注意,星号必须在指针前面。(这是一个"前缀"一元操作符)
a*
是无效的语法(它试图用乘以 a
与一些仍然必须遵循…)
a + count
是指针算术。它为您提供a
,但count
的元素数偏移到原始a
指针。所以它现在指向数组中的第count
个元素。
*(a + count)
现在对这个指针解引用,这给了你数组的第count
个元素。
a[count]
完全相同;它只是一个更好的语法。
注意:你也可以在循环中使用a++
。它所做的是将指针在数组中增加一个位置。下次使用*a
解引用a
时,它将返回下一个条目。所以你的循环可以这样重写:
double total = 0;
for (int count = 0; count < size; count++){
total = total + *a; // Access the element a currently points to
a++; // Move the pointer by one position forward
}
甚至可以将递增操作和解引用操作合并到一个表达式中。后置自增语法a++
将返回旧指针并将指针增加一个位置。对a++
的解引用现在意味着对旧指针的解引用。
double total = 0;
for (int count = 0; count < size; count++){
total = total + *(a++);
}
我想给你的第二个注意事项是,你不需要在这里使用整数变量来计数元素。由于指针现在已经携带了信息,计数器现在只用于停止循环。这也可以通过将指针与某个"结束指针"进行比较来实现,该指针保存在一个变量中:
double total = 0;
double *end = a + size; // Store the end of the array
while(a < end) {
total = total + *(a++);
}
您可以看到,我将for
循环转换为while
循环,因为我不再需要初始化或自增一些东西(记住:转到数组的下一项是在主体中完成的!)。
我希望这能说明一点指针运算。您可以使用指针"计算",就像使用索引变量(您的count
变量)一样。您甚至可以减去它们来计算指针之间的偏移量,例如
*
是解引用操作符,对地址a进行递增计数操作。
读指针。
- 添加到数组指针
- C++语法差异:二维和一维数组(指针算术)
- 数组指针表示法C++(移动数组时)
- 复制后删除原始数组指针将前 3 个字节设置为 0
- C++访问指向结构的指针中的类数组指针
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- std::flush可以用于将对象指针转换为其封闭数组指针吗
- 创建<int>对整数数组指针的矢量引用 (C++)
- 将 2D 数组指针传递给 C++ 中的函数
- 创建指针是否超过非数组指针的末尾,而不是从 C++17 中的一元运算符和未定义的行为派生?
- 队列数组指针 (C++)
- C++数组指针上的删除操作
- 对于循环不循环和检测字符数组 [指针和字符数组]
- 如何初始化数组指针对象
- 如何正确传递 2D 数组指针作为参数
- 从数组指针中获取怪异的数字
- 初始化std :: unique_ptr作为原始数组指针的初始化
- 将结构数组指针从C#传递到C
- STD :: Sort将数组指针设置为NULL
- C++数组指针错误无法将“int*”转换为“int**”