结构体指针变量地址附给临时变量怎么书写?

悠贝姆 2017-01-08 01:26:18
就这个,我想另结构体不变,然后排序结构体指针变量,但是不懂怎样书写
...全文
341 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-01-09
  • 打赏
  • 举报
回复
仅供参考:
//学号 姓名 电话 成绩
//01 XXX 182XXXXXXXX 88
#include <stdio.h>
#include <string.h>
#define MAXS 10000
struct ST {
    int XH;
    char XM[11];
    char DH[13];
    int CJ;
} st[MAXS],t;
int n,i,j;
char ln[80];
FILE *f;
int main() {
    f=fopen("in.txt","r");
    if (NULL==f) {
        printf("Can not open file in.txt!\n");
        return 1;
    }
    i=0;
    while (1) {
        if (NULL==fgets(ln,80,f)) break;
        if (4!=sscanf(ln,"%d%10s%12s%d",&st[i].XH,st[i].XM,st[i].DH,&st[i].CJ)) {
            st[i].XH=0;
            strcpy(st[i].XM,"Unknown");
            strcpy(st[i].DH,"Unknown");
            st[i].CJ=0;
            printf("line %d format error:%s!\n",i+1,ln);
        }
        i++;
        if (i>=MAXS) {
            printf(">%d lines Ignored.\n",MAXS);
            break;
        }
    }
    fclose(f);
    n=i;
    for (i=0;i<n-1;i++) {
        for (j=i+1;j<n;j++) {
            if (st[i].CJ<st[j].CJ) {t=st[i];st[i]=st[j];st[j]=t}
        }
    }
    for (i=0;i<n;i++) {
        printf("%5d%10s%12s%4d\n",st[i].XH,st[i].XM,st[i].DH,st[i].CJ);
    }
    return 0;
}
悠贝姆 2017-01-09
  • 打赏
  • 举报
回复
好懂了,谢谢
  • 打赏
  • 举报
回复
引用 4 楼 qq_36453295 的回复:
[quote=引用 1 楼 企鹅爱吃方便面的回复:]

struct A
{
int a;
}
int main()
{
struct A *s;
struct A *temp;
temp = s;
}
是这个意思吗? C++可以这么写,C语言要用malloc
我就是想问下怎么样使结构体数组排序后,再次输出结构体数组内容还是显示结构体输入的内容。而不是排序之后改变了结构体输入的内容[/quote] 我是这样理解你的问题的,你是创建了一个结构体用来存储数据,然后这个结构体变量又是一个数组型的,然后想根据这个结构体内部某个成员的大小关系进行排序,然后想输出排序后的结果,发现结构体内部有部分变量内容变化,但是有一些没有变化,对吧? 如果是这样,c++可以通过重载 = 运算符进行结构体内数据内容的整体交换,或者说不会重载运算符的话,可以通过写一个函数的方法进行结构体内部数据的交换,比如:

void swap(struct A n, struct A b)
{
int c;
c=n.a;
n.a=b.a;
b.a=c;
}
就像这样进行数据的整体交换就好了。
悠贝姆 2017-01-08
  • 打赏
  • 举报
回复
引用 1 楼 企鹅爱吃方便面的回复:

struct A
{
int a;
}
int main()
{
struct A *s;
struct A *temp;
temp = s;
}
是这个意思吗? C++可以这么写,C语言要用malloc
我就是想问下怎么样使结构体数组排序后,再次输出结构体数组内容还是显示结构体输入的内容。而不是排序之后改变了结构体输入的内容
悠贝姆 2017-01-08
  • 打赏
  • 举报
回复
引用 2 楼 qq_36453295的回复:
不是,我想把Massage这个结构体分数成员排序。 但是排序后Massage成员变量分数互相调换了。 我就想设一个结构体指针变量,指向这个Massage,然后用指针排序就不会导致Massage结构体成员的调换了。 然后进行调换的时候才发现我不懂得怎么书写把这个结构体变量地址附给temp临时变量就卡住了
你看下这个图,这样调换还是把结构体的成员成绩调换了
悠贝姆 2017-01-08
  • 打赏
  • 举报
回复
不是,我想把Massage这个结构体分数成员排序。 但是排序后Massage成员变量分数互相调换了。 我就想设一个结构体指针变量,指向这个Massage,然后用指针排序就不会导致Massage结构体成员的调换了。 然后进行调换的时候才发现我不懂得怎么书写把这个结构体变量地址附给temp临时变量就卡住了
  • 打赏
  • 举报
回复

struct A
{
int a;
}
int main()
{
struct A *s;
struct A *temp;
temp = s;
}
是这个意思吗? C++可以这么写,C语言要用malloc

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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