Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Rakenteiden Välittäminen Funktioille | Osoittimien ja Rakenteiden Käsittely
C-Rakenteiden Hallinta

bookRakenteiden Välittäminen Funktioille

Funktiot voivat käsitellä rakenteita samalla tavalla kuin tavallisia muuttujia:

main.c

main.c

copy
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

main.c

copy
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

main.c

copy
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; }
Tehtävä

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ä:

  1. Vastaanota rakenne Employee-tyyppisenä parametrina.
  2. Käytä kenttiä hourlyRate ja hoursWorked.
  3. Kerro kentät keskenään laskeaksesi viikkopalkan.
  4. Palauta laskettu palkka tyypiltään double.

calculateAverageSalary-funktion sisällä:

  1. Vastaanota kolme Employee-rakenneparametria.
  2. Kutsu funktiota calculateWeeklySalary() jokaiselle työntekijälle saadaksesi heidän palkkansa.
  3. Summaa kaikki viikkopalkat.
  4. Jaa summa arvolla 3.0 saadaksesi keskimääräisen viikkopalkan.
  5. Palauta keskiarvo tyypiltään double.

Esimerkki

Employee NameHourly RateHours WorkedWeekly Salary
Alice Johnson22.540900.00
Bob Smith18.038684.00
Carol White25.0421050.00

Average Weekly Salary: 878.00

Ratkaisu

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 5
single

single

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Suggested prompts:

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?

close

bookRakenteiden Välittäminen Funktioille

Pyyhkäise näyttääksesi valikon

Funktiot voivat käsitellä rakenteita samalla tavalla kuin tavallisia muuttujia:

main.c

main.c

copy
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

main.c

copy
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

main.c

copy
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; }
Tehtävä

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ä:

  1. Vastaanota rakenne Employee-tyyppisenä parametrina.
  2. Käytä kenttiä hourlyRate ja hoursWorked.
  3. Kerro kentät keskenään laskeaksesi viikkopalkan.
  4. Palauta laskettu palkka tyypiltään double.

calculateAverageSalary-funktion sisällä:

  1. Vastaanota kolme Employee-rakenneparametria.
  2. Kutsu funktiota calculateWeeklySalary() jokaiselle työntekijälle saadaksesi heidän palkkansa.
  3. Summaa kaikki viikkopalkat.
  4. Jaa summa arvolla 3.0 saadaksesi keskimääräisen viikkopalkan.
  5. Palauta keskiarvo tyypiltään double.

Esimerkki

Employee NameHourly RateHours WorkedWeekly Salary
Alice Johnson22.540900.00
Bob Smith18.038684.00
Carol White25.0421050.00

Average Weekly Salary: 878.00

Ratkaisu

Switch to desktopVaihda työpöytään todellista harjoitusta vartenJatka siitä, missä olet käyttämällä jotakin alla olevista vaihtoehdoista
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 5
single

single

some-alt