|
Previous, we have used (*p).fieldName with reference variables to access member variables in a struct:
#include <stdio.h> struct BankAccount { int ID; float balance; }; int main( int argc, char *argv[] ) { struct BankAccount john, mary, *p ; john.balance = 500; p = &john; // Now *p ≡ john (*p).balance = (*p).balance + 2000; mary.balance = 500; p = &mary; // Now *p ≡ mary (*p).balance = (*p).balance + 9000; printf("j: %f m:%f\n\n", john.balance, mary.balance); } |
The (binary) operator -> is a short hand operator for this combination of operations: (* ).
#include <stdio.h> // Operator -> is defined as: p->x ≡ (*p).x struct BankAccount { int ID; float balance; }; int main( int argc, char *argv[] ) { struct BankAccount john, mary, *p ; john.balance = 500; p = &john; // Now *p ≡ john (*p).balance = (*p).balance + 2000; mary.balance = 500; p = &mary; // Now *p ≡ mary (*p).balance = (*p).balance + 9000; printf("j: %f m:%f\n\n", john.balance, mary.balance); } |
We can re-write this program using the -> operator as follows:
#include <stdio.h> // Program re-written using -> struct BankAccount { int ID; float balance; }; int main( int argc, char *argv[] ) { struct BankAccount john, mary, *p ; john.balance = 500; p = &john; // Now *p ≡ john p->balance = p->balance + 2000; mary.balance = 500; p = &mary; // Now *p ≡ mary p->balance = p->balance + 9000; printf("j: %f m:%f\n\n", john.balance, mary.balance); } |
|