1) Yes.
Code:
struct foo {
    int bar;
};

void function( struct foo *ptr )
{
    ptr->bar = 5;
}

int main( void )
{
    struct foo instance;

    function( &instance );
    printf("instance->bar = %d\n", instance->bar );
    return 0;
}
2) I'm not sure what you mean exactly. Perhaps...
Code:
struct foo {
    int bar;
};

void function( struct foo **ptrptr )
{
    struct foo *ptr;

    ptr = *ptrptr;
    ...do all you need using ptr...

    ....update ptrptr when finished...
}
Something like that should suffice.

Quzah.