0
        {
            int a[3];
            mainClassStack.pushNumber(a[1,2,3]);
            break;
        }

void stack_class::pushNumber(int numberFunc)
{
    if(head==NULL)
    {
        head = new stack_struct;
        head->number = numberFunc;
        head->next_number = NULL;
        tailPointer=head;
    }
    else
    {
        pointerFunc = new stack_struct;
        pointerFunc->number=numberFunc;
        pointerFunc->next_number=NULL;
        head->next_number=pointerFunc;
        head=pointerFunc;
    }
}


void stack_class::pushNumber(char charFunc)
{

    int a=0;
    a=charFunc;
    if(head==NULL)
    {
        head = new stack_struct;
        head->number = a;
        head->next_number = NULL;
        tailPointer=head;
    }
    else
    {
        pointerFunc = new stack_struct;
        pointerFunc->number=a;
        pointerFunc->next_number=NULL;
        head->next_number=pointerFunc;
        head=pointerFunc;
    }

}


void stack_class::pushNumber(int arrayFunc[3])
{
    if(head==NULL)
    {
        for(int i=0;i<3;i++)
        {
            head = new stack_struct;
            head->number = arrayFunc[i];
            head->next_number = NULL;
            tailPointer=head;
        }
    }
    else
    {
        for(int i=0;i<3;i++)
        {
            pointerFunc = new stack_struct;
            pointerFunc->number=arrayFunc[i];
            pointerFunc->next_number=NULL;
            head->next_number=pointerFunc;
            head=pointerFunc;
        }
    }
}

I am overloading functions and pushing an array into the appropriate function which will later add the values from the arrays to a dynamic linked list. So far I have written this, but when I try to print the linked list, it shows garbage. What am I doing wrong here?

4

3 回答 3

1

这对你来说更有意义吗?

void Foo(int arg[])
{
  printf("%i\n", arg[0]);
  printf("%i\n", arg[1]);
  printf("%i\n", arg[2]);
}

int main()
{
  int a[3] = {1,2,3};
  Foo(a);
  return 0;
}

输出是:

1
2
3
于 2013-04-11T03:47:01.827 回答
0

C++ 不允许将整个数组作为参数传递给函数。但是,您可以通过指定不带索引的数组名称来传递指向数组的指针。

如果要将一维数组作为参数传递给函数,则必须以以下三种方式之一声明函数形式参数,并且所有三种声明方法都会产生相似的结果,因为每种方法都告诉编译器一个整数指针正在运行被接收。

方式一

作为指针的形式参数如下:

无效 myFunction(int *param) { . . . }

方式二

形式参数作为一个大小的数组如下:

无效 myFunction(int param[10]) { . . . }

方式 3

形式参数为一个未调整大小的数组,如下所示:

无效 myFunction(int param[]) { . . . }

于 2013-04-11T05:08:47.057 回答
0

为了更清楚其他人指出的内容,逗号运算符返回系列中的最后一个值。(1, 2, 3)因此,表达式的值是3,所以表达式a[1, 2, 3]无非是一个很长的说法a[3]

但是还有一些看起来很傻的东西,这就是这里的循环:

if(head==NULL)
{
    for(int i=0;i<3;i++)
    {
        head = new stack_struct;
        head->number = arrayFunc[i];
        head->next_number = NULL;
        tailPointer=head;
    }
}

您指向head一个新事物,在其中设置一些事物,然后将 tailPointer 设置为指向同一个新事物……但随后立即再执行两次相同的操作。你看到问题了吗?在循环结束时,您创建了三个next_number值为 all的项NULLhead并且tailPointer都指向同一个东西:最后一个创建的。您根本没有任何东西指向您创建的前两个项目,而且它们都没有相互指向。换句话说,在这个操作结束时根本没有链表(尽管有一些新对象躺在内存中的某个地方,无法访问或取消分配它们)。

您可能意味着将 if 语句放在循环中,而不是相反,但您需要更改的不仅仅是这些,因为另一个 for 循环中的代码也可能有点问题。它创建一个新项目,然后设置从头项目到新项目的链接,但随后它移动头指向新项目,因此您成功地将项目添加到列表的尾部,但留下了自己带有一个head实际上指向尾部的变量。

我建议查看发生了什么的最好方法是拿笔和纸,写下你的变量并绘制方框来代表你的对象,里面有它们的成员变量,然后一步一步地按照你的代码,写下变量值或从指针上擦除和绘制箭头以显示每个指针的位置。我想你会立即看到你的算法哪里出错了。

于 2013-04-11T04:14:40.023 回答