c++ - 指向 std::vector 的指针,指针声明

标签 c++ c++11 pointers

将 std::vector 传递给具有我不太了解的特殊签名的函数的这两个指针声明之间是否存在任何差异?

libraryFunction (int numSamples, double* const* arrayOfChannels) { 
  //things
}

std::vector<double> theVectorA = {11, 22, 33, 44};
double * p_VecA[1];
p_VecA[0] = theVectorA.data();
libraryFunction(theVectorA.size(), p_VecA);

std::vector<double> theVectorB = {55, 66, 77};
double * p_VecB = theVectorB.data();
libraryFunction(theVectorB.size(), p_VecB);

p_VecA 和 p_VecB 有什么区别?

你能解释一下函数签名吗?我不明白最后一部分。

最佳答案

double * p_VecA[1];创建一个包含 1 个指针元素的数组,指向 double (在这种情况下,第一个 doubletheVectorA )。因此p_VecA是指向 double 的指针数组,在这种情况下,如果您使用不带索引的名称,它会衰减到指向其第一个元素的指针(将其视为 double** )和 p_VecA[0]类型为 double* (就像 p_VecB 是)。

double * p_VecB创建一个指向 double 的指针(在这种情况下,第一个 doubletheVectorB )。

更新:

也许这可以帮助您理解 libraryFunction() 的签名:

What is the difference between const int*, const int * const, and int const *?

就像 jack 写道:arrayOfChannels是指向 double 的 const 指针

关于c++ - 指向 std::vector 的指针,指针声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47690527/

相关文章:

c++ - 使用数据类型转换 float 的字符串

c++ - 非成员函数的问题

c++ - 在特征模板中声明静态自动函数指针

C++ 11 智能指针的使用

c - const 关键字是什么意思?

c++ - 在 ubuntu 上使用 C++ 的段错误(核心转储)

c++ - malloc.c "sYSMALLOC: Assertion"与 C++ 项目一起执行

c++ - C++ 中干净、功能性的脚本式错误处理

c++ - 是否有一种简单的定时锁定算法可以避免多个互斥体上的死锁?

C++ vector 、列表、指针和混淆