Download presentation
Presentation is loading. Please wait.
1
1 CSE1301 Computer Programming Lecture 23 Structures (Part 2)
2
2 Topics Structs and functions Arrays of structures
3
3 Passing structs as Parameters Like any other variable, you can pass a struct as a parameter to a function Passing by value –Pass the struct – use the values of the members, but don't change them Passing by reference –Pass a pointer to the struct – you can change the values of the members
4
4 Passing a struct by Value As always, the formal parameters are copies of the actual parameters void printRecord ( Student item ) { printf("Last name: %s\n", item.lastname); printf(" Mark: %.1f\n\n", item.mark); } main() { Student studentA = {“Gauss”, 99.0}; printRecord(studentA); }
5
5 Function Returning a struct A “package” containing several values main() { Student studentA; studentA = readRecord(); } Student readRecord ( void ) { Student newStudent; printf("Enter last name and mark: "); scanf("%s %f",newStudent.lastname,&(newStudent.mark)); return newStudent; }
6
6 Passing structs by Reference Pass a pointer to a struct Change the value of some or all of the members – Changes are visible in the calling function as well as the called function
7
7 Passing structs by Reference (cont) void readStudent ( Student* sptr ) { printf(“Please enter name and ID\n”); scanf(“%s”, (*sptr).name ); /*parens needed*/ scanf(“%ld”, &((*sptr).id) ); } int main() { Student studentA; readStudent(&studentA); }
8
8 Passing structs by Reference (cont) The parentheses around the (*sptr) are needed because of precedence –e.g., (*sptr).item If you need the address of a member, you need another set of parentheses – e.g., &((*sptr).item)
9
9 Arrays of structs Each element of the array is a whole struct, which includes all the members of that struct To access a single value, you need to know which element of the array you're dealing with and which member of the struct, e.g., studentList[0].name studentList[i].id
10
10 Array of structs id:123456789 name: "fred" id:123456788 name: "ralph" id: 123456787 name: "fong" id: 123456786 name: "rachel" 0 1 2 3 studentList
11
11 Array of structs studentList studentList[0] gives you the whole struct id:123456789 name: "fred" id:123456788 name: "ralph" id: 123456787 name: "fong" id: 123456786 name: "rachel" 0 1 2 3
12
12 Array of structs studentList studentList[3].name gives you the struct member id:123456789 name: "fred" id:123456788 name: "ralph" id: 123456787 name: "fong" id: 123456786 name: "rachel" 0 1 2 3
13
13 Arrays of structs #define MAXCLASS 30 typedef struct { long int id; char name[20]; } Student;... Student sem1Class[MAXCLASS];
14
14 Arrays of structs Student sem1Class[MAXCLASS]; int i; for (i=0;i<MAXCLASS;i++) { printf("enter name\n"); scanf("%s",sem1Class[i].name); printf("enter id\n"); scanf("%d",&(sem1Class[i].id)); } name of array
15
15 Arrays of structs Student sem1Class[MAXCLASS]; int i; for (i=0;i<MAXCLASS;i++) { printf("enter name\n"); scanf("%s",sem1Class[i].name); printf("enter id\n"); scanf("%d",&(sem1Class[i].id)); } index into array
16
16 Arrays of structs Student sem1Class[MAXCLASS]; int i; for (i=0;i<MAXCLASS;i++) { printf("enter name\n"); scanf("%s",sem1Class[i].name); printf("enter id\n"); scanf("%d",&(sem1Class[i].id)); } the structure at this position in the array
17
17 Arrays of structs Student sem1Class[MAXCLASS]; int i; for (i=0;i<MAXCLASS;i++) { printf("enter name\n"); scanf("%s",sem1Class[i].name); printf("enter id\n"); scanf("%d",&(sem1Class[i].id)); } name of the member of the structure at that position in the array
18
18 Example: array of structs and pass-by-value-1 #include #define MAXLEN 50 #define MAXN 20 struct StudentRec { char lastname[MAXLEN]; float mark; }; typedef struct StudentRec Student; Student readRecord ( void ) { Student newStudent; printf("Enter last name and mark: "); scanf("%s %f", newStudent.lastname, &(newStudent.mark)); return newStudent; } void printRecord ( Student item ) { printf("Last name: %s\n", item.lastname); printf(" Mark: %.1f\n\n", item.mark); return; }
19
19 int main() { int count = 0; Student class[MAXN]; int i; printf("How many students? "); scanf("%d", &count); if (count > MAXN) { printf("Not enough space.\n"); exit(1); } for (i=0; i < count; i++) { class[i] = readRecord(); } printf("\nClass list:\n\n"); for (i=0; i < count; i++) { printRecord(class[i]); } return 0; } Example: array of structs and pass-by-value-2
20
20 Using Arrays and Pointers Some struct : s[13] An item in some struct: s[4].age A character in some name: s[7].name[3] Address of some struct: &(s[2]) An item in some struct pointed to: (*sptr).age Address of above: &((*sptr).age) This is an address within a struct typedef struct { int age; char name[20]; } Child; Child s[20];
21
21 #include #define MAXLEN 50 #define MAXN 20 struct StudentRec { char lastname[MAXLEN]; float mark; }; typedef struct StudentRec Student; void readStudent ( Student* sptr ) { printf("Please enter name and mark\n"); scanf("%s", (*sptr).lastname ); /*parens needed*/ scanf("%f", &((*sptr).mark) ); return; } void printRecord ( Student item ) { printf("Last name: %s\n", item.lastname); printf(" Mark: %.1f\n\n", item.mark); return; } Example: array of structs and pass-by-reference-1
22
22 int main() { int count = 0; Student class[MAXN]; int i; printf("How many students? "); scanf("%d", &count); if (count > MAXN) { printf("Not enough space.\n"); exit(1); } for (i=0; i < count; i++) { readStudent(&class[i]); } printf("\nClass list:\n\n"); for (i=0; i < count; i++) { printRecord(class[i]); } return 0; } Example: array of structs and pass-by-reference-2
23
23 King, 16.1 – 16.3 Deitel & Deitel,10.1 – 10.7 Kernighan & Ritchie, 6.1, 6.2, 6.7 Reading
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.