c++中new一个结构体的问题。

structStu{intn;};voidtest(structStu*s[]){...}voidmain(){structStu*s;s=newStu[10];//请问... struct Stu
{
int n;
};
void test(struct Stu *s[])
{...}
void main()
{
struct Stu *s;
s=new Stu[10];//请问这里是不是动态开辟一个struct的数组呢????????
//然后我调用test()
test(s);
}
此时会出现问题:
error C2664: 'test' : cannot convert parameter 1 from 'struct Stu *' to 'struct Stu *[]'
请问这是为什么呢?
我想传进test()的是指针数组。因为我要对s[0],s[1]...进行操作。
应该如何改呢?
展开
 我来答
百度网友b79519e
推荐于2017-11-24 · TA获得超过3399个赞
知道大有可为答主
回答量:1417
采纳率:100%
帮助的人:1306万
展开全部
struct Stu
{
int n;
};
void test(struct Stu *s[])
{...}
void main()
{
struct Stu *s;
s=new Stu[10];//请问这里是不是动态开辟一个struct的数组呢????????
//然后我调用test()
test(s);
}
你定义的s是指向一个结构体变量的,而不是结构体数组
如果要指向一个结构体数组,应该这样定义,struct Stu (*s)[];//s指向一个结构体数组
s=new Stu[10];
这样就可以了
另外:void test(struct Stu *s[])//Stu *s[],那么s是一个指针数组,而不是一个指针,但是s数组中的元素都是指向结构体变量的指针变量...
你的意思是想让s指向一个结构体数组,那么改成这样:void test(struct Stu (*s)[])应该就可以了.(还不行的话,就直接改成void test(struct Stu *s)试试,不过我感觉这个可能不对,因为类型也不匹配,但没有运行过..)
呵呵
祝你学习顺利...
刚运行过了,我的修改不行
一楼应该是正解...
s=new Stu[10];//请问这里是不是动态开辟一个struct的数组呢????????
是在内存的堆区中动态开辟一个长度为10的结构体数组....
堆区中开辟的内存不会因为函数的结束而自动释放,所以函数结束前要使用一条delete s;语句来释放分配的内存...

改成下面的就对了...
#include<iostream.h>
struct Stu
{
int n;
};
void test(struct Stu *s[])
{}
void main()
{
struct Stu **s;
s=new Stu*[10];//请问这里是不是动态开辟一个struct的数组呢????????
//然后我调用test()
test(s);
}
你的意思是s指向一个指针数组,那么s就是一个指向指针的指针变量,所以应该是
struct Stu **s;
s中的元素是指针变量,那么就应该这样:s=new Stu*[10];
呵呵,希望对你有所帮助..
elevencjdx
2011-04-13 · TA获得超过101个赞
知道答主
回答量:127
采纳率:0%
帮助的人:74.1万
展开全部
这是个参数匹配的问题。你的test函数的参数是一个指针数组,数组的每个元素是指向Stu结构体的指针,而你在调用test函数时,你传进去的参数一个指向结构体数组的指针,他们的类型不匹配,你只要将test函数的参数中的[ ]去掉即可,即改为void test( struct Stu *s ) {...}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
895379635
2012-11-01 · TA获得超过259个赞
知道小有建树答主
回答量:188
采纳率:0%
帮助的人:30.1万
展开全部
这样比较麻烦。你直接修改test的参数类型,即可。改成
void test(struct Stu *s)
{
s[0] ; //你要使用的话,可以直接用下标,没有必要让参数变成指针数组类型。这样强转不可以。

s[1]; 最好 加上一个非空判断,万一下标越界。

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dongyue2008
2011-04-13 · TA获得超过3602个赞
知道大有可为答主
回答量:1300
采纳率:100%
帮助的人:577万
展开全部
因为参数类型不匹配。将void test(struct Stu *s[])改为下面的任意一种就行了:
void test(struct Stu *s);
void test(struct Stu s[]);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式