求教:传递结构体的指针和引用

zqdreamer 2013-10-18 09:13:23
这是一端插入排序的函数
当给函数传递引用时排序错误,传递指针时排序正确。。。。
求大神解答,,为什么传递引用时排序错误。。。。
#include<iostream>
#include<iomanip>
#include<cstdlib>
#include<cstdio>
#include<windows.h>

using namespace std;

#define MAXSIZE 20
#define LT(a,b) ((a)<(b))
typedef int keyType;
typedef int InfoType;
typedef struct{
keyType key;
InfoType otherinfo;
}RedType;

typedef struct{
RedType r[MAXSIZE+1];
int length;
}SqList;
//输出
void out(SqList &s){
cout<<"\n-------------------"<<endl;
for(int i=1;i<=s.length;i++)
cout<<setw(4)<<s.r[i].key;
cout<<"\n-------------------"<<endl;
}
//插入排序
void InsertSortRef(SqList &L){
int i,j;
for(i=2;i<=L.length;++i){
if(LT(L.r[i].key,L.r[i-1].key)){
L.r[0]=L.r[i];
for(j=i-1;LT(L.r[0].key,L.r[j].key);--j)
L.r[j+i]=L.r[j];
L.r[j+1]=L.r[0];
}
}
}
void InsertSortPrt(SqList *L) {
int i,j;
for(i=2;i<=L->length;++i)
if(LT(L->r[i].key,L->r[i-1].key)){
L->r[0]=L->r[i];
for(j=i-1;LT(L->r[0].key,L->r[j].key);--j)
L->r[j+1]=L->r[j];
L->r[j+1]=L->r[0];
}
}

int main(int argc,char *argv[]){
SqList s;
cout<<"运行结果:\n";
srand(time(0));
cout<<"排序前数组a:\n";
s.length=6;
s.r[1].key=15;
s.r[2].key=65;
s.r[3].key=81;
s.r[4].key=16;
s.r[5].key=26;
s.r[6].key=85;
out(s);
//传递引用是排序错误-------------------------------为什么,,求大神解答
//InsertSortRef(s);
//传递指针式排序正确
InsertSort1(s);
cout<<"排序后数组a:\n";
out(s);
cout<<endl;
system("pause");
...全文
172 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zqdreamer 2013-10-18
  • 打赏
  • 举报
回复
谢谢,各位的解答了。。。。
zqdreamer 2013-10-18
  • 打赏
  • 举报
回复
自己解答,,实际上以上两种方式都是正确的,只是第36行 L.r[j+i]=L.r[j];写错了,应该写为 L.r[j+1]=L.r[j]; 传递引用实际上传递的是变量的别名,对别名的修改实际上是对变量的修改 传递指针传递的是变量的地址,当使用解引用是也是对原变量地址中的内容进行修改。
shiguojie19892 2013-10-18
  • 打赏
  • 举报
回复
void InsertSortRef(SqList &L); 当你传入s时,是要传入他的首地址,所以要带上&s
shiguojie19892 2013-10-18
  • 打赏
  • 举报
回复
引用 1 楼 nihao7441 的回复:
上面代码,第68行 改为 InsertSortPrt(&s);
你的 s 结构的一个实体 你的传递指针的函数是有取地址符号的, 同理你的传递引用的函数就要就指针符号, 你看一下你的引用是要一个带&(取地址)的参数,而你传入的s是一个实体,所以应该是引用他的地址带上&即可
zqdreamer 2013-10-18
  • 打赏
  • 举报
回复
大神,总算等到了。。我是新手,能具体解释下吗????先拜谢了
zqdreamer 2013-10-18
  • 打赏
  • 举报
回复
大神,总算等到了。。我是新手,能具体解释下吗????先拜谢了
worldy 2013-10-18
  • 打赏
  • 举报
回复
传递指针和传递引用,函数体的写法是不一样的
zqdreamer 2013-10-18
  • 打赏
  • 举报
回复
上面代码,第68行 改为 InsertSortPrt(&s);

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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