عملیات روی اشارهگرها عملیات متداولی که روی اشارهگرها انجام میشوند ، عبارتند از : الف) عمل انتساب در مورد اشارهگرها نیز مشابه سایر انواع متغیرها ، میتوان مقداری را به یک متغیر اشارهگر نسبت داد . به هر حال بطوری که مشاهده شده ، این عمل مانند سایر متغیرها گسترده نمیباشد . به یک متغیر اشارهگر میتوان آدرس یک متغیر یا مقدار صفر را نسبت داد . ب) اعمال محاسباتی زبان C ، اجازه میدهد که یک مقدار صحیح را به یک اشارهگر اضافه کنید و یا از آن کسر نمایید ؛ برای مثال اگر p یک متغیر اشارهگر باشد ، عباراتی مشابه : p+5 , p-5 معتبر است . ولی باید به مفهوم آن دقت کافی شود . برای مثال مفهوم p+5 آن است که به پنج شئی بعد از شئی که p به آن اشاره میکند ، اشاره خواهد کرد ؛ بنابراین اگر p آدرس متغیری از نوع : short int p ; را داشته باشد که دو بایت حافظه اشغال میکند ، عبارت p+5 به : (10 = 2×5) 10 بایت بعد از آدرسی که p معرف آن است ، اشاره خواهد کرد . حال اگر p ، آدرس متغیری از نوع : float p ; را در خود داشته باشد ، عبارت p+5 به : 20 بایت (20 = 4×5) بعد اشاره خواهد نمود . بنابراین p+5 همیشه به مفهوم به اندازه 5 شئی بعد از آنکه p اشاره میکند ، خواهد بود . پس کامپایلر ، 5 را در بزرگی یا طول شئی مورد نظر برحسب بایت ضرب میکند و آن را بر محتوای p اضافه میکند ، تا آدرس جدید بدست آید . بنابراین عملیات محاسباتی روی اشارهگرها ، چهار عمل افزودن ، کاستن ، ++ و -- میباشد . اگر دو متغیر اشارهگر از یک نوع باشند ، یعنی اشیایی که اشارهگرهای مزبور به آن اشاره میکنند ، یکسان باشند ، میتوان مقادیر آن دو اشارهگر را از هم تفریق کرد ؛ برای مثال مقدار : &a[3] - &a[0] برابر 3 خواهد بود . درواقع این تفاضل تعداد اشیاء بین این دو اشارهگر را معرفی مینماید . بازکردن و بستن فایل هر فایل قبل از اینکه بتواند مورد استفاده قرار گیرد ، باید باز گردد . مواردی که در حین بازکردن فایل مشخص میشوند عبارتند از : - نام فایل . - نوع فایل ازنظر ذخیرة اطلاعات text) یا . (binary - نوع فایل ازنظر ورودی ـ خروجی (آیا فایل فقط بهعنوان ورودی است ، آیا فقط بهعنوان خروجی است یا هم بهعنوان ورودی است و هم بهعنوان خروجی) . یک فایل ممکن است طوری باز شود که فقط عمل نوشتن اطلاعات بر روی آن مجاز باشد . به چنین فایلی ، فایل خروجی گفته میشود . اگر فایل طوری باز گردد که فقط عمل خواند اطلاعات از آن امکانپذیر باشد به چنین فایلی ، فایل ورودی گفت میشود . اگر فایل طوری باز شود که هم عمل نوشتن اطلاعات بر روی آن مجاز باشد و هم عمل خواندن اطلاعات از آن ، به چنین فایلی ، فایل ورودی و خروجی گفته میشود . اگر فایلی قبلاً وجود نداشته باشد ، در حین بازشدن باید بهعنوان فایل خروجی باز شود . اگر فایلی قبلاً وجود داشته باشد و بهعنوان خروجی بازگردد ، اطلاعات قبلی آن از بین میرود . تابع fopen برای باز کردن فایل مورد استفاده قرار گرفته و دارای الگوی زیر است : FILE *fopen (char *filename , *mode) در الگوی فوق ، filename به رشتهای اشاره میکند که حاوی نام فایل و محل تشکیل یا وجود آن است . نام فایل داده از قانون نامگذاری فایل برنامه تبعیت میکند و شامل دو قسمت : نام و انشعاب است که بهتر است انشعاب فایل داده ، dat انتخاب گردد . محل تشکیل یا وجود فایل میتواند شامل نام درایو و یا هر مسیر موجود روی دیسک باشد . mode مشخص میکند که فایل چگونه باید باز شود (ورودی ، خروجی و یا ...) . مقادیری که میتوانند بجای mode در تابع fopen قرار گیرند ، همراه با مفاهیم آنها در جدول زیر آمدهاند . مقادیر معتبر mode در تابع fopen( ) mode | مفهوم | r (rt) | فایلی از نوع text را بهعنوان ورودی باز میکند . | w (wt) | فایلی از نوع text را بهعنوان خروجی باز میکند . | a (at) | فایل را طوری باز میکند که بتوان اطلاعاتی را به انتهای آن اضافه نمود . | rb | فایلی از نوع باینری را بهعنوان ورودی باز میکند . | wb | فایلی از نوع باینری را بهعنوان خروجی باز میکند . | ab | فایل موجود از نوع باینری را طوری باز میکند که بتوان اطلاعاتی را به انتهای آن اضافه نمود . | r + (r+t) | فایل موجود از نوع text را بهعنوان ورودی و خروجی باز میکند . | w + (w+t) | فایلی از نوع text را بهعنوان ورودی و خروجی باز میکند . | a + (a+t) | فایل موجود از نوع text را بهعنوان ورودی و خروجی باز میکند . | r + b | فایل موجود از نوع باینری را بهعنوان ورودی و خروجی باز میکند . | a + b | فایل احتمالاٌ موجود از نوع باینری را به عنوان ورودی و خروجی باز میکند . | w + b | فایل از نوع باینری را به عنوان ورودی و خروجی باز میکند . |
برای باز کردن فایل باید یک اشارهگر از نوع فایل تعریف گردد تا به فایلی که توسط تابع fopen باز میشود اشاره نماید . اگر فایل به دلایلی باز نشود این اشارهگر برابر با NULL خواهد بود . بهعنوان مثال ، دستورات زیرا را درنظر بگیرید : FILE *fp ; (1) (2) fp = fopen ("A : test" , "w") ; دستور (1) ، متغیر fp را از نوع اشارهگر فایل تعریف میکند و دستور (2) فایلی به نام text را بر روی درایو A ایجاد مینماید (چون حالت "w" ، فایل را بهصورت خروجی باز میکند) . برای تشخیص این که آیا فایل با موفقیت باز شده است یا خیر میتوان اشارهگر فایل را با NULL مقایسه کرد . NULL ماکرویی است که در فایل stdio.h تعریف شده است و با حروف بزرگ بکار میرود . اگر اشارهگر فایل برابر با NULL باشد بدین معنی است که فایل باز نشده است : if (( fp=fopen ("A : test" , "w"))= NULL ) { printf ("cannot open file \ n") ; exit (0) ; } پس از اینکه برنامهنویس کارش را با فایل تمام کرد ، باید آن را ببندد . بستن فایل توسط تابع fclose انجام میشود که دارای الگوی زیر است : int fclose (FILE *fp) در الگوی فوق ، fp به فایلی اشاره میکند که باید توسط تابع fclose بسته شود . بهعنوان مثال ، دستور : fclose (p) ; موجب بستن فایلی میشود که p به آن اشاره میکند . ادامه دارد ....
|