تابع ممکن است اشاره‌گری به ساختار را به توابع فراخواننده آن برگرداند. مثال ۹ـ۱۰ نحوه عمل را نمایش می‌دهد.
مثال  برنامه زیر با فراخواندن تابعی به نام search، آرایه‌ای از ساختارها که شامل سابقه مشتری بانک است و همچنین شماره حساب مشتری را در اختیار تابع قرار می‌دهد. تابع مزبور شماره حساب مورد نظر را در مجموعه فهرست مشتریان جستجو می‌کند. اگر چنین رکوردی وجود داشت آدرس آن وگرنه، NULL (صفر) برمی‌گرداند. سپس در تابع اصلی، درصورت وجود داشتن چنین رکوردی، بقیه مشخصات صاحب شماره حساب مذکور نمایش داده می‌شود، در غیر این صورت پیغام مناسبی چاپ می‌شود. عمل فراخوانی تابع برای پیدا کردن رکورد خاص تا موقعی که شماره حساب ارسالی به تابع مخالف صفر باشد ادامه می‌یابد. سوابق دارندگان حساب به صورت مقدار اولیه به آرایه‌ای از ساختارها نسبت داده شده است.
# include<stdio.h>
# define n 3
# define NULL 0
typedef stuct {
char *name ;
int acct-no ;
char acct-type ;
float balance ;
} record ;
main ()
{
static record customer[ ] = {
{“Nader” , 3333 ,’c’ ۳۳٫۳۳} ,
{“Payam” , 6666 ,’۰’ , ۶۶٫۶۶} ,
{“Amir” , 9999 ,’d’ , ۹۹٫۹۹) ,
} ;        /* array of structures */
int acctn ;
record *pt ;    /* pointer declaration */
record *search (record table[ ] , int acctn) ;     /* function declaration */
printf (“Customer Account Locator \n”) ;
printf (“To End , Enter 0 for the account number \n”) ;
printf (“\n Account no.: “) ;     /* enter first account number */
scanf (“%d” , & acctn) ;
while (acctn !=0)
{
pt = search (customer , acctn) ;    /* found a match */
if (pt != NULL)
{
printf (“\n Name:  %s \n” , pt -> name) ;
printf (“Accont no.:  %d \n” , pt -> acct-no) ;
printf (“Account type:  %c \n” , pt -> acct-type) ;
printf (“Balance:  %.۲f \n” , pt -> balance) ;
}
else
printf (“\n error-please try again\n”) ;
printf (“\n Account no.: “) ;    /* enter next account number*/
scanf (“%d” , & acctn) ;
}
}
record *search (record table[ ] , int acctn)     / * function definition */
/* accept an array of structures and an account number ,
return a pointer to a particular structure (an array element)
if the account number matches a member of that structure */
{
int count ;
for (count = 0 ; count<n ; + + count)
if (table [count].acct-no = = acctn)    /* found a match */
return (&table[count]) ;     /* return pointer to array element */
return (NULL) ;
}
اندازه آرایه مورد نظر با ثابت سمبولیکی n بیان شده و مقدار آن ۳ است؛ یعنی برای سادگی کار، فقط ۳ رکورد، برای نمونه ذخیره شده است. بدیهی است که در عمل، مقدار n خیلی بزرگ‌تر خواهد بود.
می‌توان تمامی ساختار را به طور مستقیم به عنوان آرگومان به تابع انتقال داد یا با دستور return ساختار را به طور مستقیم از تابع برگرداند (برخلاف آرایه که با تابع برگردانده نمی‌شود). چنین انتقال ساختاری به‌صورت مقدار خواهد بود. بنابراین اگر با تابع تغییراتی در اعضای ساختار داده شود، نتیجه آن در تابع فراخواننده یا در خارج از تابع مذکور اعمال نخواهد شد. به هرحال اگر ساختار تغییریافته به نقطه فراخوانی از برنامه برگردانده شود، تغییرات حاصل در اینجا شناخته خواهد شد.

مثال  برنامه زیر را ملاحظه کنید.
# include<stdio.h>
typedef struct {
char *name ;
int acct-no ;
char acct-type ;
float balance ;
} record ;
main ()     /* transfer a structure to a function */
{
void adjust (record customer) ;    /* function declaration */
static record customer = {“Nader” , 3333 , ’c’ , ۳۳٫۳۳} ;
printf (“%s %d %c %.2f \n” , customer.name , customer.acct-no ,
customer.acct-type , customer.balance) ;
abjust (customer) ;
printf (“%s %d %c %.2f \n” , customer.name , customer.acct-no ,
customer.acct-type , customer.balance) ;
}
void adjust (record cust)    /* function definition */
{
cust.name = “Payam” ;
cust.acct-no = 9999 ;
cust.acct-type =’r’ ;
cust.balance = 99.99 ;
return ;
}
برنامه مزبور به جای اشاره‌گر به نوع ساختار، تمامی ساختار (در واقع کپی ساختار) را به تابع می‌فرستند. حال تابع adjust ساختاری را به عنوان آرگومان دریافت می‌کند (برخلاف مثال ۹ـ۱۰ که اشاره‌گر به ساختار را دریافت می‌کرد). در اینجا چیزی از تابع به تابع main برگردانده نشده است.
اگر برنامه مزبور اجرا شود، خروجی زیر حاصل خواهد شد.
Nader 3333 c 33.33
Nader 3333 c 33.33
در اینجا، نتیجه اجرای دستورهای جایگذاری، که در تابع adjust به کار برده شده است، در تابع main شناخته نمی‌شود (یعنی نتیجه در تابع اصلی منعکس نمی‌شود). دلیل این کار نیز واضح است، زیرا انتقال ساختار customer از تابع main به تابع adjust با مقدار صورت گرفته است.
حال فرض کنید که ‌این برنامه را به طریقی اصلاح کنیم که تغییرات انجام شده در تابع adjust به تابع main برگردانده شود.
#include<stdio.h>
typedef struct {
char *name ;
int acct-no ;
char acct-type ;
float balance ;
} record ;
main ()     /* transfer a structure to a function and return the structure */
{
record adjust (record customer) ;    /* function declaration */
static record customer = {“Nader” , 3333 ,’C ’ , ۳۳٫۳۳} ;
printf (” %s %d %s %.2f \n” , customer.name , customer.acct-no ,
customer.acct-type , customer.balance) ;
customer = adjust (customer) ;
printf (“%s %d %.2f \n” , custo6mer.name , customer.acct-no ,
customer.acct-type , customer.balance) ;
}
record adjust (record cust)    /* function definition */
{
cust.name = “Payam” ;
cust.acct-no = 9999 ;
cust.acct-type =’r’ ;
cust.balance = 99.99 ;
return (cust) ;
}
در این برنامه، برخلاف مثال، تابع adjust ساختاری را که همان ساختار تغییریافته در تابع مزبور است به تابع main برمی‌گرداند.
اجرای این برنامه خروجی زیر را ایجاد می‌کند.
Nader 3333 c 33.33
Payam 9999 r 99.99
بنابراین تغییرات اعمال شده در تابع adjust در تابع main نیز منعکس شده است، زیرا این بار ساختار تغییریافته به طور مستقیم به قسمت فراخوانی برنامه برگردانده شده است.