c - How to pass structures to functions whose parameter type has two asterisks -


let there structure called employee :

struct employee {     int basicsalary;     int bonus;     int netsalary; }; 

let there function prototype follows :

int calc_netsalary(struct employee**,int); 

let variable array of structures declared in main function follows :

struct employee emp[100]; 

let function called in main follows :

for (i = 0; < n; i++) {     emp[i].netsalary = calc_netsalary(emp[i],n);    // warning here } 

let function definition follows :

int calc_netsalary(struct employee** emp,int n) {     int i;     for(i = 0; < n; i++)     {         emp[i]->netsalary = emp[i]->basicsalary + emp[i]->bonus;     }     return emp[i]->netsalary; } 

i don't know pass argument function expects parameter 2 asterisks (in place of emp above). getting warning passing argument 1 of ‘calc_netsalary’ incompatible pointer type. know must silly mistake did or not clear concepts of pointers. please !

expanding on comment:

the calc_netsalary function expects data in emp laid out this:

     +---+                 +-------------+-------+-----------+ emp: |   | emp[0] -------> | basicsalary | bonus | netsalary |      +---+                 +-------------+-------+-----------+      |   | emp[1] ----+      +---+            |    +-------------+-------+-----------+      |   | emp[2] -+  +--> | basicsalary | bonus | netsalary |      +---+         |       +-------------+-------+-----------+       ...          |                          |       +-------------+-------+-----------+                     +-----> | basicsalary | bonus | netsalary |                            +-------------+-------+-----------+ 

that is, each emp[i] pointer instance of struct employee.

however, declaration of emp in main looks this:

     +-------------+-------+-----------+ emp: | basicsalary | bonus | netsalary | emp[0]      +-------------+-------+-----------+      | basicsalary | bonus | netsalary | emp[1]      +-------------+-------+-----------+      | basicsalary | bonus | netsalary | emp[2]      +-------------+-------+-----------+       ... 

that is, each emp[i] instance of struct employee.

either declaration of emp in main wrong, or definition of calc_netsalary wrong; cannot made work together. make emp in main match calc_netsalary expects, needs declared initialized in 1 of following ways:

struct employee **emp = malloc( sizeof *emp * 100 ); if ( emp )   ( size_t = 0; < 100; i++ )     emp[i] = malloc( sizeof *emp[i] ); 

or

struct employee *emp[100]; ( size_t = 0; < 100; i++ )   emp[i] = malloc( sizeof *emp[i] ); 

if emp supposed declared array of struct employee, calc_netsalary function needs changed follows:

int calc_netsalary(struct employee* emp,int n) {     int i;     for(i = 0; < n; i++)     {         emp[i].netsalary = emp[i].basicsalary + emp[i].bonus;     }     return emp[i].netsalary; } 

if told declare emp array of struct employee , figure out way pass calc_netsalary such treated array of pointers struct employee, given impossible task. wrong assignment.

edit

actually, there third way around this, involves declaring second array in main , passing that argument:

struct employee emp[100]; struct employee *emp2[100]; ( size_t = 0; < 100; i++ )   emp2[i] = &emp[i]; ... calc_netsalary( emp2, 100 ); 

but i'm assuming assignment requires use emp.


Comments

Popular posts from this blog

networking - Vagrant-provisioned VirtualBox VM is not reachable from Ubuntu host -

c# - ASP.NET Core - There is already an object named 'AspNetRoles' in the database -

ruby on rails - ArgumentError: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true -