TopBottom

Followers



Click on more
SUBSCRIBE

Enter your email address:

Delivered by FeedBurner



VIDEO

Announcement: wanna exchange links? contact me at ravikrak@yahoo.com

Pointers And Structures

Posted by Ravi Kumar at Monday, September 26, 2011
Share this post:
Ma.gnolia DiggIt! Del.icio.us Yahoo Furl Technorati Reddit

We know that the name of an array stands for the address of
its zeroth element.The samething is true of the names of
arrays of structure variables.Suppose product is an array
variable of structtype.The name product represents the
address of its zeroth element consider the following
declaration.

struct inventory
{
char name[30];
int number;
float price;
}
product[2],*ptr;
This statement declares product s an array of two elements,
each of the type struct inventory and ptr as a pointer to
data objects of the type struct inventory.

The assignment
ptr=product;
would assign the address of the zeroth element of product
to ptr.This is,the pointer ptr will now point to product[0].
Its members can be accessed using the following notation.

ptr --> name
ptr--> number
ptr --> price
The symbol -->is called the arrow operator and is made
up of a minus sign and a greater than sign.Note that ptr-->
is simply another way f wrting product[0].When the pointer
ptr is incremented by one,it is made to point to the next
record. i.e,product[1].
We could use the notation
(*ptr).number
to access the member number.The parantheses around *ptr
are necessary because the member operator "." has a higher
precedence than the operator *

A program to illustrate the use of a structure pointer
to manipulate the elements of an array of structures the
program highlights all the features discussed above.Note
that the pointer ptr(of type struct invert) is also used
as the loop control index in for loops

struct invent
{
char *name[20];
int number;
float price;
};
main( )
{
struct invent product[3],*ptr;
printf("INPUT\n\n");
for(ptr=product;ptr lessthan product+3;ptr++)
scannf("%s%d%f",ptr->name,ampercent ptr->number,
ampercent ptr->price);
printf("\n OUTPUT\n\n");
ptr=product;
while(ptr lessthan product+3)
{
printf("% -20s %5d %102f\n",ptr->name,
ptr->number,ptr->price);
ptr++;
}
}


Output:
INPUT
Washing-machine 5 7500
Electric-iron 12 350
Two-in-one 7 1250

OUTPUT:
Washing-machine 5 7500.00
Electric-iron 12 350
Two-in-one 7 1250.00

While using structure pointers, we should take care
of the precedence of operators.
The operators '->', '.',(),[] enjoy higher priority
among the operators.They bind very tightly with thier
operands
For example,given the definition
struct
{
int count;
float *p;
*ptr
}
then the statement ++ptr->count;
increments count,not ptr however,
(++ptr)->count; increments ptr first,and
then links count the statement
ptr++->count;increments ptr first,and then
links count the statement
ptr++->count; is legal and increments ptr
after accessing count.The following statements also behave
in the similar fashion.
*ptr->p Fetches whatever p points to
*ptr-p++ Increments p after accessing what
ever it points to
(*ptr->p)++ Increments whatever p points to
*ptr++->p Increments ptr after accessing
whatever it points to.
Passing of a structure as an argument to a function or a
function recieves a copy of an entire structure and returns
it after working on it.This method is inefficient in terms
of both.The execution speed and memory.
We can overcome this drawback by passing a pointer to
the structure and then using this pointer to work on the
structure members.Consider the following function:
Print_invent(item)
struct invent *item;
{ printf("Name:%s\n",item->name);
printf("price:%f\n",item->price);
}
this function can be called by
print_invent(&product)
The ormal argument item recieves the address of the
structure product an therefore it must be declared as a
pointer of type struct invent,which represents the
structure of product.

Share |

Labels:

0 comments:

Post a Comment