{
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;
}
}
}
我正在重载函数并将数组推入适当的函数,稍后将数组中的值添加到动态链表中。到目前为止,我已经写了这个,但是当我尝试打印链表时,它显示了垃圾。我在这里做错了什么?
答案 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
的项目,而head
和tailPointer
都指向同一个内容:最后一个创建。你什么都没有指向你创建的前两个项目,而且没有一个指向彼此。换句话说,在此操作结束时根本没有链接列表(尽管在某些内存中存在一些新对象,无法访问或取消分配它们。)
你可能意味着在循环中使用if语句,而不是相反,但是你需要改变的不仅仅是那个,因为另一个for循环中的代码也可能有点问题。它创建一个新项目,然后设置从头项目到新项目的链接,但然后它将头部移动到指向新项目,因此您成功地将项目添加到列表的尾部,但留下自己使用head
变量实际指向尾部。
我建议最好的方法来查看正在发生的事情是拿铅笔和纸,记下变量并绘制框来表示你的对象,里面有成员变量,然后一步一步地按照你的代码,写在变量值中或从指针中删除和绘制箭头以显示每个落地的位置。我想你会立刻看到你的算法出错了。
答案 2 :(得分:0)
C ++不允许将整个数组作为参数传递给函数。但是,您可以通过指定不带索引的数组名称来传递指向数组的指针。
如果要在函数中传递单维数组作为参数,则必须以下列三种方式之一声明函数形式参数,并且所有三种声明方法都会产生类似的结果,因为每个都告诉编译器一个整数指针即将被接收。
路-1
正式参数作为指针如下:
void myFunction(int * param) { 。 。 。 }
路-2
作为大小数组的形式参数如下:
void myFunction(int param [10]) { 。 。 。 }
路-3
正式参数作为未确定的数组,如下所示:
void myFunction(int param []) { 。 。 。 }