结构,指针和改变它们

时间:2014-01-12 20:53:47

标签: c sorting pointers struct

我对C编程很陌生,但对其他语言有一些经验。

我目前正在学习结构和指针。我的任务是使用结构和指针对几个名称进行排序。

我开始创建一个结构和一个函数来交换2个名字。当我想用结构声明一个数组时,我无法弄清楚出了什么问题。

这是我编译时遇到的错误:

pr.c:29:22: error: expected expression
        studenten[i]={s[i][0],s[i][1],s[i][2]};
                 ^
1 error generated.

以下是一些代码:

#include <stdio.h>
#define MAXSTUDENT 2

typedef struct {
    char *firstname;
    char *pre;
    char *lastname;
} student;

void swap(student **a,student **b) {
    student *temp;
    temp=*a;
    *a=*b;
    *b=temp;   
}


int main () {
    int i;
    char *s[MAXSTUDENT][3]={{"John"," the ","Way"},{"John"," ","Smith"}};
    student *studenten[MAXSTUDENT];

    for (i=0;i<MAXSTUDENT;i++) {
        studenten[i]={s[i][0],s[i][1],s[i][2]};
    }


    printf("%s%s%s    -     %s%s%s\n",studenten[0]->firstname,studenten[0]->pre,studenten[0]->lastname,studenten[1]->firstname,studenten[1]->pre,studenten[1]->lastname);
    swap(&studenten[0],&studenten[1]);
    printf("%s%s%s    -     %s%s%s\n",studenten[0]->firstname,studenten[0]->pre,studenten[0]->lastname,studenten[1]->firstname,studenten[1]->pre,studenten[1]->lastname);
}

1 个答案:

答案 0 :(得分:3)

这不符合您的预期:

studenten[i] = {s[i][0],s[i][1],s[i][2]};

成员初始化列表仅在声明中有效,不允许常规作业使用初始化列表。你必须手动完成,并自己分配内存:

for (i=0;i<MAXSTUDENT;i++) {
    studenten[i] = malloc(sizeof(*studenten[i]));
    if (studenten[i] == NULL) {
        /* Handle malloc error... */
    }
    studenten[i]->firstname = s[i][0];
    studenten[i]->pre = s[i][1];
    studenten[i]->lastname = s[i][2];
}

在任何一种情况下,请注意,对于任何大于或等于2的s[i][j]0i - 您只需初始化s[0]s[1]。< / p>