c语言结构体指针如何定义和使用

Python017

c语言结构体指针如何定义和使用,第1张

struct stu

{

char name[20]

long number

float score[4]

}

再定义指向结构体类型变量指针变量:

struct stu *p1, *p2

定义指针变量p 1、p 2,分别指向结构体类型变量。引用形式为:指针变量→成员;

C语言中的结构体

在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。

定义与声明

结构体的定义如下所示,struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。

结构体成员的引用

有两种方式,英文的句点 . ,一个减号加一个大于号 ->。

当结构体是一个指针时要引用结构体的成员就用->而如果不是指针就用.。

如:

struct msg_st {

      int a

}

struct msg_st  msg;

struct msg_st *ms

msg.a = 10

ms->a = 20

孩子,你这个代码很多错误。

1 编译错误:result=(studentarr+6)地址赋值给结构体对象?

2 scanf("%s,%s,%s,%s,%c,%d",STU[i].name,STU[i].surname,STU[i].UUN,STU[i].department,&STU[i],每个变量前都要加&

3 printf("%s %s %s %s %c %d",findOldest.name,findOldest.surname,findOldest.UUN,findOldest.department,findOldest.gender,findOldest.age)函数名称的变量?错了吧?

4 严重错误:结构体中如:name这种char*根本存不下scanf输入的字符串的,需要把所有char*改成char数组

5 for(i=3i<6i++){ scanf ...}这种貌似可能搞不定的,没法多次循环输入多次,这点哥也不确定。

最后附上简单修改的代码,我没时间,没帮你改涉及scanf的部分。

#include <stdlib.h>

#include <stdio.h>

typedef struct{

char* name

char* surname

char* UUN

char* department

char gender

int age

}student_t

student_t* findOldest(student_t *studentarr){

//student_t temp

int olderAge

int sequence

//student_t result

int i

sequence = 0

olderAge = studentarr->age

for(i=1i<3i++)

{

//if(studentarr->age >(studentarr+1)->age){

//temp=*(studentarr+i)

//*(studentarr+i)=*(studentarr+1+i)

//*(studentarr+i+1)=temp

//}

printf("age[%d]\n", studentarr[i].age)

if(olderAge <studentarr[i].age)

{

olderAge = studentarr[i].age

sequence = i

printf("sequence[%d]\n", sequence)

}

}

//result = *(studentarr+6)

//return result

return (studentarr+sequence)

}

int main() {

/* BEGIN ANSWER */

student_t STU[3]={

{"John","Bidhop","d1234","Inf",'m',20},

{"Lady","Cook","s2345","Eng",'f',17},

{"James","Jackson","s3456","Eng",'m',19}

}

int i

//for(i=3i<6i++){

//printf("please type the data of students\n")

// printf("name,surname,UUN,department,gender,age\n")

// scanf("%s,%s,%s,%s,%c,%d",STU[i].name,STU[i].surname,STU[i].UUN,STU[i].department,&STU[i].gender,&STU[i].age)

//}

student_t *stu=STU

student_t* oldest = findOldest(stu)

printf("%s %s %s %s %c %d\n",oldest->name,oldest->surname,oldest->UUN,oldest->department,oldest->gender,oldest->age)

/* END ANSWER */

return EXIT_SUCCESS

}