在c++中将数组压入函数
pushing an array to a function in c++?
{
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;
}
}
}
我正在重载函数并将数组压入适当的函数中,该函数稍后将数组中的值添加到动态链表中。到目前为止,我已经写了这个,但是当我试图打印链表时,它显示了垃圾。我哪里做错了?
这对你来说更有意义吗?
void Foo(int arg[])
{
printf("%in", arg[0]);
printf("%in", arg[1]);
printf("%in", arg[2]);
}
int main()
{
int a[3] = {1,2,3};
Foo(a);
return 0;
}
输出是:
1
2
3
为了更清楚地说明其他人指出的内容,逗号操作符返回序列中的最后一个值。表达式(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
变量。
我建议查看正在发生的事情的最佳方法是拿起铅笔和纸,写下您的变量并绘制框来表示您的对象,其中包含其成员变量,然后一步一步地遵循您的代码,写入变量值或从指针中擦除并绘制箭头以显示每个人的位置。我想你马上就会发现你的算法哪里出错了。
c++不允许将整个数组作为参数传递给函数。但是,您可以通过指定数组的名称而不指定索引来传递指向数组的指针。
如果你想传递一个一维数组作为函数的实参,你必须用以下三种方式之一声明函数的形式形参,这三种声明方法都会产生类似的结果,因为每种方法都告诉编译器将要接收一个整型指针。
Way-1
作为指针的形式形参如下:
void myFunction(int *param){...}
方法2
作为大小数组的形式参数如下:
void myFunction(int param[10]){...}
3
作为未大小数组的形式参数如下:
void myFunction(int param[]){...}
- 第 i 个元素返回 i 的函数数组
- 使用嵌套函数数组是个好主意吗?
- 正确实现类函数数组
- 试图引用已删除函数数组的相等运算符
- 如何在静态函数中使用成员函数数组
- 无法创建函数数组
- 构造函数数组
- 使用开关或定义函数数组 - 更快
- 编写一个函数,该函数将覆盖主函数数组中的值
- 可以像'funs[1]();'一样调用的函数数组
- std::AVX内部函数数组
- 如果数组大小未知,如何将函数数组作为参数传递
- 从函数数组中获取值
- 使用元编程在编译时初始化函数数组
- 将C函数数组转换为C++函数指针数组
- 复制构造函数 [数组] C++
- 添加函数数组并随机选择其中一个
- 指针到私有成员函数数组
- 可以单独声明函数数组的元素
- (c++)将main中的随机值保存到函数数组中