Rakenteiden Välittäminen Funktioille
Funktiot voivat käsitellä rakenteita samalla tavalla kuin tavallisia muuttujia:
main.c
123456789101112131415161718192021#include <stdio.h> // structure definition typedef struct { char name[50]; } Person; // function to display information about a person void printPerson(Person p) { printf("Name: %s\n", p.name); } int main() { // creating a structure and initializing its values Person person1 = {"John"}; // call a function to display information about a person printPerson(person1); return 0; }
Jotta funktio voi "vuorovaikuttaa" rakenteen kanssa, esimerkiksi muuttaa olemassa olevan rakenteen kenttiä, funktion täytyy ottaa vastaan osoitin rakenteeseen:
main.c
12345678910111213141516171819202122232425262728293031#include <stdio.h> // structure definition typedef struct { char symbol; }Example; // function for changing the values of structure fields via a pointer void changePoint(Example* ptr, int newSymbol) { // check for NULL pointer if (ptr != NULL) { ptr->symbol = newSymbol; } } int main() { // create the Example structure and a pointer Example ptr1 = {'H'}; Example* ptr = &ptr1; printf("Old symbol: %c | %p\n", ptr1.symbol, &ptr1); // use function to change the field of structures changePoint(ptr, 'y'); printf("New symbol: %c | %p\n", ptr1.symbol, &ptr1); return 0; }
Rakenteita voidaan luoda funktioiden sisällä, ja tällaiset rakenteet voivat "elää" funktioiden ulkopuolella (eivät ole paikallisia), jos funktio palauttaa osoittimen tällaiseen rakenteeseen:
main.c
1234567891011121314151617181920212223242526272829303132#include <stdio.h> #include <stdlib.h> // structure definition typedef struct { int value; }Example; // function creates a structure with the given field Example* CreateStruct(int setVal) { Example* ptr = (Example*)malloc(sizeof(Example)); // check for successful memory allocation if (ptr != NULL) { ptr->value = setVal; } return ptr; } int main() { // use function to create structure Example* ptrToStruct = CreateStruct(23); printf("Value inside struct: %d", ptrToStruct->value); free(ptrToStruct); // free memory return 0; }
Swipe to start coding
Johdat pientä tiimiä, jossa on kolme työntekijää, ja jokaisella on oma tuntipalkka ja viikottaiset työtunnit.
Tehtäväsi on laskea koko tiimin keskimääräinen viikkopalkka.
calculateWeeklySalary-funktion sisällä:
- Vastaanota rakenne
Employee-tyyppisenä parametrina. - Käytä kenttiä
hourlyRatejahoursWorked. - Kerro kentät keskenään laskeaksesi viikkopalkan.
- Palauta laskettu palkka tyypiltään
double.
calculateAverageSalary-funktion sisällä:
- Vastaanota kolme
Employee-rakenneparametria. - Kutsu funktiota
calculateWeeklySalary()jokaiselle työntekijälle saadaksesi heidän palkkansa. - Summaa kaikki viikkopalkat.
- Jaa summa arvolla
3.0saadaksesi keskimääräisen viikkopalkan. - Palauta keskiarvo tyypiltään
double.
Esimerkki
| Employee Name | Hourly Rate | Hours Worked | Weekly Salary |
|---|---|---|---|
| Alice Johnson | 22.5 | 40 | 900.00 |
| Bob Smith | 18.0 | 38 | 684.00 |
| Carol White | 25.0 | 42 | 1050.00 |
Average Weekly Salary: 878.00
Ratkaisu
Kiitos palautteestasi!
single
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Can you show an example of a function that modifies a structure using a pointer?
How do I return a pointer to a structure created inside a function?
What are the risks of returning pointers to structures created inside functions?
Mahtavaa!
Completion arvosana parantunut arvoon 4.35
Rakenteiden Välittäminen Funktioille
Pyyhkäise näyttääksesi valikon
Funktiot voivat käsitellä rakenteita samalla tavalla kuin tavallisia muuttujia:
main.c
123456789101112131415161718192021#include <stdio.h> // structure definition typedef struct { char name[50]; } Person; // function to display information about a person void printPerson(Person p) { printf("Name: %s\n", p.name); } int main() { // creating a structure and initializing its values Person person1 = {"John"}; // call a function to display information about a person printPerson(person1); return 0; }
Jotta funktio voi "vuorovaikuttaa" rakenteen kanssa, esimerkiksi muuttaa olemassa olevan rakenteen kenttiä, funktion täytyy ottaa vastaan osoitin rakenteeseen:
main.c
12345678910111213141516171819202122232425262728293031#include <stdio.h> // structure definition typedef struct { char symbol; }Example; // function for changing the values of structure fields via a pointer void changePoint(Example* ptr, int newSymbol) { // check for NULL pointer if (ptr != NULL) { ptr->symbol = newSymbol; } } int main() { // create the Example structure and a pointer Example ptr1 = {'H'}; Example* ptr = &ptr1; printf("Old symbol: %c | %p\n", ptr1.symbol, &ptr1); // use function to change the field of structures changePoint(ptr, 'y'); printf("New symbol: %c | %p\n", ptr1.symbol, &ptr1); return 0; }
Rakenteita voidaan luoda funktioiden sisällä, ja tällaiset rakenteet voivat "elää" funktioiden ulkopuolella (eivät ole paikallisia), jos funktio palauttaa osoittimen tällaiseen rakenteeseen:
main.c
1234567891011121314151617181920212223242526272829303132#include <stdio.h> #include <stdlib.h> // structure definition typedef struct { int value; }Example; // function creates a structure with the given field Example* CreateStruct(int setVal) { Example* ptr = (Example*)malloc(sizeof(Example)); // check for successful memory allocation if (ptr != NULL) { ptr->value = setVal; } return ptr; } int main() { // use function to create structure Example* ptrToStruct = CreateStruct(23); printf("Value inside struct: %d", ptrToStruct->value); free(ptrToStruct); // free memory return 0; }
Swipe to start coding
Johdat pientä tiimiä, jossa on kolme työntekijää, ja jokaisella on oma tuntipalkka ja viikottaiset työtunnit.
Tehtäväsi on laskea koko tiimin keskimääräinen viikkopalkka.
calculateWeeklySalary-funktion sisällä:
- Vastaanota rakenne
Employee-tyyppisenä parametrina. - Käytä kenttiä
hourlyRatejahoursWorked. - Kerro kentät keskenään laskeaksesi viikkopalkan.
- Palauta laskettu palkka tyypiltään
double.
calculateAverageSalary-funktion sisällä:
- Vastaanota kolme
Employee-rakenneparametria. - Kutsu funktiota
calculateWeeklySalary()jokaiselle työntekijälle saadaksesi heidän palkkansa. - Summaa kaikki viikkopalkat.
- Jaa summa arvolla
3.0saadaksesi keskimääräisen viikkopalkan. - Palauta keskiarvo tyypiltään
double.
Esimerkki
| Employee Name | Hourly Rate | Hours Worked | Weekly Salary |
|---|---|---|---|
| Alice Johnson | 22.5 | 40 | 900.00 |
| Bob Smith | 18.0 | 38 | 684.00 |
| Carol White | 25.0 | 42 | 1050.00 |
Average Weekly Salary: 878.00
Ratkaisu
Kiitos palautteestasi!
single