代码之家  ›  专栏  ›  技术社区  ›  VaioIsBorn

在函数中使用向量指针时出错

  •  1
  • VaioIsBorn  · 技术社区  · 16 年前

    我有这段代码,但它不会编译,我不明白是什么错了-我想向量的指针是不正确的。 我的想法是在main()中收集一些数字,并将它们存储在向量和数组中,然后将它们的内存地址传递给函数,并使用指针打印存储的数据。

    当我读到一些关于指针的文章时,我想到了这个,上面说我应该使用指针来节省内存,所以imo下面的代码不会复制向量和数组的内容,而是使用指针来访问它们在内存中的位置——这就是我想做的。

    #include <iostream>
    #include <vector>
    using namespace std;
    
    void function(vector<int>* a, int *s)
    {
        cout << "function starts.." << endl;
        for(int i=0;i<a->size();i++)
        {
            cout << a[i] << endl;
            cout << s[a[i]] << endl;
        }
        cout << "function ends..." << endl;
    }
    
    
    int main(void)
    {
        vector<int> m;
        int s[102];
        for(int i=0;i<10;i++)
        {
            m.push_back(i*i);
            s[i*i] = i-2;
        }
        function(&m, &s);
        return 0;
    }
    

    我在编译时收到几个错误,有问题。

    请告诉我我的代码有什么问题以及如何修复它。谢谢您。。。

    5 回复  |  直到 16 年前
        1
  •  5
  •   Tronic    16 年前

    应通过引用而不是指针传递矢量:

    void function(vector<int>& a, int *s)
    

    然后

    function(m, ...);
    

    在向量指针上使用[],肯定会引起奇怪的问题,因为它的行为好像指向一个STD::向量数组(实际上它只指向一个数组)。向量本身从来没有被索引过。你也可以用 (*a)[...] 通过指针索引向量。

        2
  •  2
  •   Charles Beattie    16 年前

    如果坚持使用指针进行解析,那么正确的语法应该是:

    void function(vector<int>* a, int *s[]) 
    { 
        cout << "function starts.." << endl; 
        for(int i=0;i<a->size();i++) 
        { 
            cout << (*a)[i] << endl; 
            cout << (*s)[(*a)[i]] << endl; 
        } 
        cout << "function ends..." << endl; 
    } 
    
        3
  •  1
  •   Conor    16 年前

    首先在主程序中s是指向int的指针,而m是向量。因此,函数调用应如下所示:

    功能(&M,S);

    其次,在函数中,a是指向向量的指针,因此应按如下方式编制索引:(*a)[i]。

    但是,您确实应该使用const引用来传递向量:

    void函数(const vector&a,int*s) { … 无法<<a[i]<<结束; … }

    并称之为:

    功能(m,s);

        4
  •  1
  •   Vlad    16 年前

    (修正)

    &s 事实上 int(*)[102] :指向指向包含102个项的数组的指针。

    你应该说

    function(&m, s);
    

    这是因为根据旧的c遗留规则,数组本质上是指向其索引为0的项的常量指针。所以 s 已经 int*

        5
  •  0
  •   ileon    16 年前

    此版本有效:

    #include <iostream>
    #include <vector>
    using namespace std;
    
    void function(const vector<int>& a, int s [102])
    {
        cout << "function starts.." << endl;
        for(int i=0;i<(int)a.size();i++)
        {
            cout << a [i] << endl;
            cout << s[a [i]] << endl;
        }
        cout << "function ends..." << endl;
    }
    
    
    int main(void)
    {
        vector<int> m;
        int s[102];
        for(int i=0;i<10;i++)
        {
            m.push_back(i*i);
            s[i*i] = i-2;
        }
        function(m, s);
        return 0;
    }