请教,结构体作为函数形参不支持引用调用吗?

wencal 2004-03-19 12:49:32
以下是源程序:
/*程序用于测试,目的:交换list结构体的a和b的值*/
struct list
{
int a;
int b;
};

void change(struct list &s)/*此处无法通过,报错*/
{
int temp;
temp=s.a;
s.a=s.b;
s.b=temp;
}

main()
{
struct list h;
h.a=6;h.b=4;
printf("\n%d\t%d",h.a,h.b);
change(h);
printf("\n%d\t%d",h.a,h.b);
}


如果换成指针就可以了:

struct list
{
int a;
int b;
};

void change(struct list* s)
{
int temp;
temp=s->a;
s->a=s->b;
s->b=temp;
}

main()
{
struct list *h;
h->a=6;h->b=4;
printf("\n%d\t%d",h->a,h->b);
change(h);
printf("\n%d\t%d",h->a,h->b);
}

...全文
503 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
moswawa 2004-03-19
  • 打赏
  • 举报
回复
....
老大...
你应该这样写:
main()
{
/*struct list *h;*/
/* 你的这行代码是错误的.你定义的是一个指针...*/
struct list h;
h.a=6;h.b=4;
printf("\n%d\t%d",h.a,h.b);
change(&h);
printf("\n%d\t%d",h.a,h.b);
}
lovezn0424 2004-03-19
  • 打赏
  • 举报
回复
我在vc.6
中调试没问题.
wencal 2004-03-19
  • 打赏
  • 举报
回复
哦,谢谢moswawa(布娃娃),同学拜托我给他用C编程,
我以为C++可以用引用在C中也应该可以
编译后才发现错了。

好吧!!

结贴。。。。。
freshairfly 2004-03-19
  • 打赏
  • 举报
回复
标准C不支持 引用 吧!!!!
bideyore 2004-03-19
  • 打赏
  • 举报
回复
各位楼上的兄弟,如果小弟没搞错,引用是C++新增的类型吧?在C中可以用吗?
moswawa 2004-03-19
  • 打赏
  • 举报
回复
我对C++不熟...-_-
不过我知道其实C++和C中差不多是调过来.
在C中实现类似的功能就是将地址做为参数.
c:
void change(int *a, int *b){
int temp;
temp = *a;
*a = *b;
*b = temp;
return;
}
void main(){
int a, b;
a = 10;
b = 20;
change(&a, &b);

}
C++:
void change(int& a, int& b){
int temp;
temp = a;
a = b;
b = temp;
return;
}
void main(){
int a, b;
a = 10;
b = 20;
change(a, b);
}

还有,在C++中,结构体也是可以引用传递的.
就是
#include "stdio.h"
struct list
{
int a;
int b;
};

void change(struct list &s)/*´Ë´¦ÎÞ·¨Í¨¹ý£¬±¨´í*/
{
int temp;
temp=s.a;
s.a=s.b;
s.b=temp;
}

main()
{
struct list h;
h.a=6;h.b=4;
printf("\n%d\t%d",h.a,h.b);
change(h);
printf("\n%d\t%d",h.a,h.b);
}
这样的.你不能通过肯定是你把它存成了*.C
记住,C中的引用调用是用指针来实现的.

wencal 2004-03-19
  • 打赏
  • 举报
回复
另外同意moswawa(布娃娃)和qianyao()

忘记了在第二个程序中申请内存: h = (struct list*)malloc(sizeof(struct list));

只是奇怪少了上面那一句居然也不出错。。。且成功编译运行。
wencal 2004-03-19
  • 打赏
  • 举报
回复
在C中怎么才能像C++中那样使用引用调用呢?
wencal 2004-03-19
  • 打赏
  • 举报
回复
换成C++时,在C++中使用引用调用。
#include <iostream.h>

struct list
{
int a;
int b;
};

void change(struct list& s)
{
int temp;
temp=s.a;
s.a=s.b;
s.b=temp;
}

void main()
{
struct list h;
h.a=6;h.b=4;
cout<<h.a<<"\t"<<h.b<<endl;
change(h);
cout<<h.a<<"\t"<<h.b<<endl;
}



#include <iostream.h>

void change(int& a,int& b)
{
int temp;
temp=a;
a=b;
b=temp;
}

void main()
{
int c=6;int d=4;
cout<<c<<"\t"<<d<<endl;
change(c,d);
cout<<c<<"\t"<<d<<endl;
}

均成功实现值交换功能;

为什么转换成C就不行了???

请教,moswawa(布娃娃),谢谢!!!
moswawa 2004-03-19
  • 打赏
  • 举报
回复
在VC6下面没问题啊
到是你的第二个函数指针没付值报了warning
struct list *h;
h->a=6;h->b=4;

唉声叹气....
这明显是语法错误...
struct list *h;只是一个指针....你都没给它菔值....这个时候h这个指针的值是不可预知的.....
struct list *h = NULL;
h = (struct list*)malloc(sizeof(struct list));
seawind43 2004-03-19
  • 打赏
  • 举报
回复
在VC6下面没问题啊
到是你的第二个函数指针没付值报了warning
struct list *h;
h->a=6;h->b=4;
qianyao 2004-03-19
  • 打赏
  • 举报
回复
第一种没错,到是第二个出错了,应该是struct list *h = new struct list;
moswawa 2004-03-19
  • 打赏
  • 举报
回复
你能不能仔细看看我的回复?
moswawa 2004-03-19
  • 打赏
  • 举报
回复
struct list &s
老大,你上那儿找这种语法???
我看不出来你的函数能说明你的问题??
首先,你在函数的声明处:
void change(struct list &s)/*此处无法通过,报错*/
就算你写成这样void change(int &s)
一样也不会通过编译........

引用调用什么?你要搞清楚....
change(&h);

明白了不?
wencal 2004-03-19
  • 打赏
  • 举报
回复
moswawa(布娃娃) ,我问的是结构体类型使用引用调用为什么不可以?
如果换成int等类型就可以这样使用。下面那个才是指针的实现。
wencal 2004-03-19
  • 打赏
  • 举报
回复
Darkay_Lee,在VC7.1不报错吗?
我使用了MyList,在vc6.0还是出错,
list是结构体名,应该不会错吧 !!!
Darkay_Lee 2004-03-19
  • 打赏
  • 举报
回复
struct MyList
{
int a;
int b;
};

void change(struct MyList &s)/*此处无法通过,报错*/
{
int temp;
temp=s.a;
s.a=s.b;
s.b=temp;
}

main()
{
struct MyList h;
h.a=6;h.b=4;
printf("\n%d\t%d",h.a,h.b);
change(h);
printf("\n%d\t%d",h.a,h.b);
}
Darkay_Lee 2004-03-19
  • 打赏
  • 举报
回复
把list改一下名字成MyList就OK了(VC7.1)估计是你的定义和std::list冲突了。
moswawa 2004-03-19
  • 打赏
  • 举报
回复
void change(struct list &s)/*此处无法通过,报错*/
是因为你是struct list &不是一种类型,struct list* 才是指向struct list类型的一个指针.
你还没有分清*和&的区别....
wencal 2004-03-19
  • 打赏
  • 举报
回复
是上面那个程序,在vc6中错误:
--------------------Configuration: aa - Win32 Debug--------------------
Compiling...
aa.c
C:\Documents and Settings\Administrator\桌面\aa.c(8) : error C2143: syntax error : missing ')' before '&'
C:\Documents and Settings\Administrator\桌面\aa.c(8) : error C2143: syntax error : missing '{' before '&'
C:\Documents and Settings\Administrator\桌面\aa.c(8) : error C2059: syntax error : '&'
C:\Documents and Settings\Administrator\桌面\aa.c(8) : error C2059: syntax error : ')'
C:\Documents and Settings\Administrator\桌面\aa.c(21) : warning C4013: 'change' undefined; assuming extern returning int
Error executing cl.exe.

aa.obj - 4 error(s), 1 warning(s)


下面那个没有问题的。

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧