Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Att Skicka Strukturer till Funktioner | Arbeta med Pekare och Strukturer
Behärska C-Strukturer

bookAtt Skicka Strukturer till Funktioner

Funktioner kan arbeta med strukturer på samma sätt som med vanliga variabler:

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; }

För att en funktion ska kunna "interagera" med en struktur, till exempel ändra fälten i en befintlig struktur, måste funktionen ta emot en pekare till strukturen:

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; }

Strukturer kan skapas inuti funktioner, och sådana strukturer kan "existera" utanför funktionerna (inte lokalt) om funktionen returnerar en pekare till en sådan struktur:

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; }
Uppgift

Swipe to start coding

Du leder ett litet team med tre anställda, och varje person har en timlön samt ett antal arbetade timmar per vecka.
Din uppgift är att beräkna genomsnittlig veckolön för hela teamet.

I funktionen calculateWeeklySalary:

  1. Ta emot en struktur av typen Employee som parameter.
  2. Kom åt fälten hourlyRate och hoursWorked.
  3. Multiplicera dessa för att beräkna veckolönen för den anställde.
  4. Returnera den beräknade lönen som en double.

I funktionen calculateAverageSalary:

  1. Ta emot tre Employee-strukturer som parametrar.
  2. Anropa calculateWeeklySalary() för varje anställd för att få deras totala lön.
  3. Addera alla tre löner.
  4. Dividera summan med 3.0 för att få genomsnittlig veckolön.
  5. Returnera detta genomsnitt som en double.

Example

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

Average Weekly Salary: 878.00

Lösning

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 5
single

single

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

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

bookAtt Skicka Strukturer till Funktioner

Svep för att visa menyn

Funktioner kan arbeta med strukturer på samma sätt som med vanliga variabler:

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; }

För att en funktion ska kunna "interagera" med en struktur, till exempel ändra fälten i en befintlig struktur, måste funktionen ta emot en pekare till strukturen:

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; }

Strukturer kan skapas inuti funktioner, och sådana strukturer kan "existera" utanför funktionerna (inte lokalt) om funktionen returnerar en pekare till en sådan struktur:

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; }
Uppgift

Swipe to start coding

Du leder ett litet team med tre anställda, och varje person har en timlön samt ett antal arbetade timmar per vecka.
Din uppgift är att beräkna genomsnittlig veckolön för hela teamet.

I funktionen calculateWeeklySalary:

  1. Ta emot en struktur av typen Employee som parameter.
  2. Kom åt fälten hourlyRate och hoursWorked.
  3. Multiplicera dessa för att beräkna veckolönen för den anställde.
  4. Returnera den beräknade lönen som en double.

I funktionen calculateAverageSalary:

  1. Ta emot tre Employee-strukturer som parametrar.
  2. Anropa calculateWeeklySalary() för varje anställd för att få deras totala lön.
  3. Addera alla tre löner.
  4. Dividera summan med 3.0 för att få genomsnittlig veckolön.
  5. Returnera detta genomsnitt som en double.

Example

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

Average Weekly Salary: 878.00

Lösning

Switch to desktopByt till skrivbordet för praktisk övningFortsätt där du är med ett av alternativen nedan
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 5
single

single

some-alt