Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将int*添加到指针数组_C++_Pointers - Fatal编程技术网

C++ 将int*添加到指针数组

C++ 将int*添加到指针数组,c++,pointers,C++,Pointers,我在处理指针的细微差别时遇到了很多麻烦。我试图将对整数的引用添加到一个int指针数组中,但似乎没有完全正确。这是我的代码: int main() { ATree<int> testTree; int nums[12] = {5,4,3,7,6,1,2,12,15,9,8,11}; int *ptr; int num, a; for (int i = 0; i < 5; ++i) { a = nums[i];

我在处理指针的细微差别时遇到了很多麻烦。我试图将对整数的引用添加到一个int指针数组中,但似乎没有完全正确。这是我的代码:

int main()
{
    ATree<int> testTree;
    int nums[12] = {5,4,3,7,6,1,2,12,15,9,8,11};
    int *ptr;
    int num, a;
    for (int i = 0; i < 5; ++i)
    {
        a = nums[i];
        *ptr = a;
        testTree.add(nums[i]);
    }
    cout << "Enter a value to search for" << endl;
    cin >> num;
    cout << testTree.search(num) << endl;
    return 0;
}
ATree.h

template <typename Item>
class ATree
{
    public:
    ATree();
    void add(Item);
    void add_helper(int, Item);
    int search(Item);
    int search_helper(int, Item);
    int get_size();
    private:
    int size;
    Item* tree[40];
};
#include "ATree.hpp"
阿特雷水电站

template <typename Item>
ATree<Item>::ATree()
{
for (int i = 0; i < 40; ++i)
{ tree[i] = nullptr }
size = 0;
}
template <typename Item>
void ATree<Item>::add(Item obj)
{
    int n = 1;
    if ((tree[1]) == nullptr)
    {
        tree[1] = &obj;
    }
    else
    {
         add_helper(n, obj);
    }
}
template <typename Item>
void ATree<Item>::add_helper(int n, Item obj)
{       
    if (tree[n] == nullptr)
    {
        tree[n] = &obj;
    }
    else if (&obj > tree[n])
    {
        n = 2*n+1;
        add_helper(n, obj);
    }
    else
    {
        n = 2*n;
        add_helper(n, obj);
        }
    }
template <typename Item>
int ATree<Item>::search(Item obj)
{
    int n = 1;
    if (&obj == tree[1])
        { return 1; }
    else
        { return search_helper(n, obj);}
    }
template <typename Item>
int ATree<Item>::search_helper(int n, Item obj)
    {
    if (&obj == tree[n])
        { return n; }
    else if (&obj > tree[n])
    {
        n = 2*n+1;
        return search_helper(n, obj);
    }
    else
    {
        n = 2*n;
        return search_helper(n, obj);
    }
}
template <typename Item>
int ATree<Item>::get_size()
{return size;}

从概念上讲,我发现指针相对简单,但一旦它们开始在类或数组之间传递,数组似乎会以不同的方式处理它们?它开始变得非常反直觉。

基本上是存储对象,而不是指针:

Item tree[40];
template <typename Item>
void ATree<Item>::add(Item obj)
{
    int n = 1;
    if ((tree[1]) == nullptr) // USe a counter here instead, to know how many objects are stored
    {
        tree[1] = obj;
    }
    else
    {
         add_helper(n, obj);
    }
}
template <typename Item>
void ATree<Item>::add_helper(int n, Item obj)
{       
    if (tree[n] == nullptr)
    {
        tree[n] = obj;
    }
    else if (obj > tree[n])
    {
        n = 2*n+1;
        add_helper(n, obj);
    }
    else
    {
        n = 2*n;
        add_helper(n, obj);
        }
    }
template <typename Item>
int ATree<Item>::search(Item obj)
{
    int n = 1;
    if (obj == tree[1])
        { return 1; }
    else
        { return search_helper(n, obj);}
    }
}
template <typename Item>
int ATree<Item>::search_helper(int n, Item obj)
    {
    if (obj == tree[n])
        { return n; }
    else if (&obj > tree[n])
    {
        n = 2*n+1;
        return search_helper(n, obj);
    }
    else
    {
        n = 2*n;
        return search_helper(n, obj);
    }
}
然后在比较中,比较对象,而不是它们的指针:

Item tree[40];
template <typename Item>
void ATree<Item>::add(Item obj)
{
    int n = 1;
    if ((tree[1]) == nullptr) // USe a counter here instead, to know how many objects are stored
    {
        tree[1] = obj;
    }
    else
    {
         add_helper(n, obj);
    }
}
template <typename Item>
void ATree<Item>::add_helper(int n, Item obj)
{       
    if (tree[n] == nullptr)
    {
        tree[n] = obj;
    }
    else if (obj > tree[n])
    {
        n = 2*n+1;
        add_helper(n, obj);
    }
    else
    {
        n = 2*n;
        add_helper(n, obj);
        }
    }
template <typename Item>
int ATree<Item>::search(Item obj)
{
    int n = 1;
    if (obj == tree[1])
        { return 1; }
    else
        { return search_helper(n, obj);}
    }
}
template <typename Item>
int ATree<Item>::search_helper(int n, Item obj)
    {
    if (obj == tree[n])
        { return n; }
    else if (&obj > tree[n])
    {
        n = 2*n+1;
        return search_helper(n, obj);
    }
    else
    {
        n = 2*n;
        return search_helper(n, obj);
    }
}

此代码未经测试,无法正常工作,因为您必须添加一个计数器来检查实际存储的元素数量。我建议使用std::vector,并且也没有边界检查。

tree[1]=&obj;那不行。您需要将元素存储在树中,在总共有40个位置之后,更改类型以存储对象本身。这是一个临时对象,获取它的地址并存储它,但不起作用。与if&obj==tree[1]相同。事实上,我的一个错误是,很明显,每次引用整数对我来说都是真的,传递指向临时对象的指针听起来很可疑。不好,谢谢。但是有没有办法在我的基数组中使用指针呢?我原以为,有了指针数组,指针仍然会指向正确的对象。不,你不能存储指向临时对象的指针。或者将它们作为常量传递&然后执行指针存储。但是如果其中一个int超出范围。。。