将数组推送到c ++中的函数?

时间:2013-04-11 03:38:45

标签: c++ class

        {
            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;
        }
    }
}

我正在重载函数并将数组推入适当的函数,稍后将数组中的值添加到动态链表中。到目前为止,我已经写了这个,但是当我尝试打印链表时,它显示了垃圾。我在这里做错了什么?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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值均为NULL的项目,而headtailPointer都指向同一个内容:最后一个创建。你什么都没有指向你创建的前两个项目,而且没有一个指向彼此。换句话说,在此操作结束时根本没有链接列表(尽管在某些内存中存在一些新对象,无法访问或取消分配它们。)

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

我建议最好的方法来查看正在发生的事情是拿铅笔和纸,记下变量并绘制框来表示你的对象,里面有成员变量,然后一步一步地按照你的代码,写在变量值中或从指针中删除和绘制箭头以显示每个落地的位置。我想你会立刻看到你的算法出错了。

答案 2 :(得分:0)

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

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

路-1

正式参数作为指针如下:

void myFunction(int * param) { 。 。 。 }

路-2

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

void myFunction(int param [10]) { 。 。 。 }

路-3

正式参数作为未确定的数组,如下所示:

void myFunction(int param []) { 。 。 。 }