首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试用2d变频器来理解指针

尝试用2d变频器来理解指针
EN

Stack Overflow用户
提问于 2019-09-26 19:31:20
回答 2查看 79关注 0票数 2

我对C++非常陌生,很难理解如何用2d向量启动指向指针的指针。我找了很多东西,似乎找不到解决问题的办法。在我的例子中,原始的2d向量是在main中设置的,并通过引用传递给子。在该子程序中,我希望设置另一个指针,以发送到多个其他子程序。

下面是代码的简化表示形式。我在dblptr[0][0] = 3;的潜艇上出了个错误。错误是:

E0349 no运算符"=“匹配这些操作数

代码:

代码语言:javascript
复制
#include<iostream>
#include <vector>


using namespace std;


vector<vector<double>> *dblptr;

void SetDblPtr(vector<vector<double>> &arr)
{

    dblptr = &arr;
    dblptr[0][0] = 3;

}


int main()
{
    vector<vector<double>> arr(3, vector<double>(3));

    arr = { {1,2,3}, {1,2,3},{1,2,3} };

    SetDblPtr(arr);

    cin.get();

    return 0;
}
EN

回答 2

Stack Overflow用户

发布于 2019-09-26 19:44:13

首先,没有理由在代码中使用单个指针。

接下来,std::vector不是c数组,它包含的不仅仅是数据(例如大小和容量)。您不能获取向量的地址,然后在尝试时使用指针算法。如果您想这样做,那么使用data(),它将返回一个指向基础数据的向量的指针:

代码语言:javascript
复制
 vector<vector<double>> arr(3, vector<double>(3));
 auto fourth_element = arr.data()[3]; 

vector<vector<double>>的第四个元素是vector<double>,您也不能在上面使用指针算法(参见上文)。要获得第一个通过指针标识符获得的第一个双变量,您可以这样做:

代码语言:javascript
复制
 double x = arr.data()[0].data()[0];
                  //^--  pointer to array
                  //   ^-- first element of that array (ie a vector<double>)
                  //          ^-- pointer to array
                  //             ^-- first element of that array (ie a double)

看到这一点,应该变得很明显,您得到的主要是模糊的语法。对于向量,您应该更喜欢使用它的operator[]

代码语言:javascript
复制
double y = arr[0][0];

实际上,这也是一样的,你只是不需要使用指针通过间接的循环。

TL;博士:没有理由在这里使用指针。任务应是:

代码语言:javascript
复制
arr[0][0] = 3;

PS:为什么std::vector是如此优秀的容器,原因之一是它的数据局部性。但是,当元素存储在堆中时,std::vector<std::vector<T>>就失去了这一巨大的优势,通常最好使用平面std::vector<T>

票数 4
EN

Stack Overflow用户

发布于 2019-09-26 20:10:08

这一行造成了以下问题:

代码语言:javascript
复制
dblptr[0][0] = 3;

代之以:

代码语言:javascript
复制
(*dblptr)[0][0] = 3;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58123570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档