زبان برنامه نویسی سی/علائم و عملگرهای دیگر و اولویتها: تفاوت میان نسخهها
محتوای حذفشده محتوای افزودهشده
جزبدون خلاصۀ ویرایش |
جزبدون خلاصۀ ویرایش |
||
خط ۲۰:
عملگر '''پرانتز و آکولاد''' : عملگر پرانتز به صورت جفت باز و بسته در مقابل یک شناسه باعث میشود تا شناسه به عنوان تابع تعریف شود که سپس باید بعد از پرانتز بسته یک جفت آکولاد به صورت باز و بسته نوشته شوند که بدنه تابع را تشکیل میدهد . ضمناً میتوان تابع را اعلان نمود ( prototype ) سپس تعریف کرد و هر جا لازم شد احضار و یا همان فراخوانی نمود که باز هم با کمک عملگر پرانتز امکان پذیر است ( رجوع کنید به فصل تابع )
<br><br>
عملگر '''سمی کالن''' : عملگر ; که نام آن سِمی کالُن ( semi colon ) است پس از هر حکم باعث به اجرا گذاشته شدن آن توسط کامپایلر میشود . هر حکم میتواند اعلان و یا تعریف متغیرهای پایه ، ترکیبی و یا اعلان و فراخوانی تابع باشد ( که تابع ممکن است یک تابع کتابخانهای باشد ) و البته برخی دستورها مثل continue یا return . مثال : ;float g
<br><br>
عملگر '''نقطه و اشارهگر به عضو''' : عملگر « . » یا همان دات و یا نقطه ، اگر پس از شناسه ی نمونه ی یک ساختمان و یا اجتماع بیاید که عملگر نقطه ، پیش از نام یکی از اعضای آن ساختمان یا اجتماع است ، دسترسی به آن شی ( عضو ساختمان یا اجتماع ) را فراهم میکند . همچنین عملگر <- باعث میشود تا با نوشتن نام یک نمونه اشارهگر به ساختمان و یا اجتماع پیش از عملگر و نوشتن عضوی از آن ساختمان یا اجتماع ، پس از عملگر ، نمونه اشارهگر ما به عضو اشاره شده دسترسی پیدا کند . دقت کنید که در نوشتن هیچ کدام از نام نمونه و یا نام نمونه اشارهگر و همچنین عضو ساختمان یا اجتماع نباید فاصلهای بگذارید ( رجوع کنید به موضوع ساختمان و اجتماع و اشارهگر )
<br><br>
عملگر '''اشاره و آدرس دهی''' : عملگر * که نام آن استریسک یا همان ستاره است اگر پس از کلیدواژههای سازنده دادهها بیاید ، داده را به عنوان اشارهگر تعریف میکند . سپس برای مقدار دهی آن باید از عملگر آدرس دهی یعنی & که نام امپرسند است ، استفاده نمود تا با قرار دادن شناسه یک داده دیگر در مقابل آن ، اشارهگر به آن داده دیگر اشاره نماید . سپس برای دسترسی به آن داده ، دوباره باید از عملگر استریسک اما این بار بدون نوشتن کلیدواژههای ایجاد کننده دادهها استفاده نمود ( رجوع کنید به موضوع اشارهگر )
خط ۷۹:
;int a = 6 یا ;float y = 53.84795
در تمامی مقداردهیها عملوند سمت چپ باید یک شناسه باشد ولی عملوند سمت راست میتواند یک مقدار عددی یا حرفی ، شناسهای که مقدار دارد و یا مقداری را باز میگرداند ( تابع ) و یا یک ماکرو باشد . بدین ترتیب مقدار و موجودی عملوند سمت راست در عملوند سمت چپ که یک شناسه است قرار میگیرد . اما علاوه بر
{{چپچین}}
خط ۹۴:
{{پایان چپچین}}
'''دقت کنید :''' عملگرهای مقداردهی ترکیبی فقط بر روی اعداد عمل میکنند و هر کدام ، قوانین عملگر ترکیب شده را در مورد عملوندهای خود انتظار دارند و اگر جز این باشد یا کامپایلر خطا میگیرد یا برنامه شما دارای باگ ( Bug ) خواهد بود
خط ۱۱۰:
همان طور که از علم ریاضی به یاد دارید ، عمل ضرب و تقسیم بر عمل جمع و تفریق ، اولویت دارند و اگر از هم جدا نشده باشند هر کدام که در سمت چپتر قرار داشته باشد زودتر مورد ارزیابی قرار میگیرد . در مثال بالا با کمک پرانتزها کل عبارت را به چند زیر عبارت تقسیم کردهایم که اگر عبارت مقدار ذخیره شده در یک float باشد ، مقدار بازگردانده شده 30.375 خواهد بود چرا که ابتدا 7 * 3 و 5 + 2 مورد ارزیابی قرار میگیرند که حاصل اولی 21 و حاصل دومی 7 است که در هم ضرب میشوند و عدد 147 به دست میآید که سپس تقسیم بر 8 میشود که 18.375 به دست خواهد آمد که جمع میشود با 6 * 2 ( که میشود 12 ) و در نهایت عدد 30.375 به دست میآید . اما اگر از پرانتزها استفاده نمیکردیم پاسخ ما 54.625 میشد
بنابراین « اولویت » یا Precedence به دیرتر یا زودتر لحاظ شدن یک عنصر زبان C میگویند . بالاترین اولویت در یک برنامه C با یادداشتها (Comments) میباشد که هر آنچه بعد از دو اسلش / به صورت // در آن خط قرار گرفته باشد یا هر آنچه بین */ و /* قرار گرفته باشد نادیده گرفته خواهد شد . اولویت بعدی با پیشپردازندهها Preprocessors که با علامت شارپ (Sharp) # آغاز میشوند
در یک عبارت و یا حتی زیر عبارت ، اولویتها بدین ترتیب میباشند ( که اگر چند عملگر اولویت یکسانی داشته باشند ، آنکه در سمت چپتر قرار دارد زودتر مورد ارزیابی قرار خواهد گرفت ) :
خط ۱۲۲:
۴ − عملگر sizeof ، عملگر اشارهگر و آدرس دهی ( * و & ) ، افزایش و کاهش پیش از شناسه ( a++ و a-- ) ، نه منطقی (!) ، نه بیتی (~)
۵ − پرانتزهای کستکردن
۶ − ضرب ، تقسیم و باقیمانده ( * و / و % )
خط ۱۵۴:
==عملگر sizeof==
عملگر sizeof که از اسم آن نیز پیداست ، اندازه و حجم اشغال شده توسط دادهای که به عنوان عملوند به آن ارجاع داده میشود را در مبنای دهدهی و واحد بایت (Byte) باز میگرداند . دقت کنید که sizeof نمیتواند اندازه اشغال شده توسط تابعها ، bit-field ها و یا دادههای ناقص و ناتمام (incomplete types) را بازگرداند ( علیرغم اینکه داده هستند ) ؛ پیش از این به انواع داده ناقص و ناتمام اشاره نمودیم که شامل دادههای پوچ (void) ، آرایههایی با تعداد عنصرهای نامعین و ساختمان (structure) و یا اجتماعی (union) که دادههای تعریف نشده دارند و یا در خود ، ساختمان یا اجتماعی دارند که دادههای تعریف نشده دارند میشود
عملگر sizeof را به چند توع میتوان به کار برد :
خط ۱۶۲:
۲ − نام یک شناسه را که جز شناسه تابع و یا bit-field و یا دادهای که ناقص و ناتمام است در مقابل sizeof مینویسید : ;sizeof a
۳ − یک عبارت را داخل یک جفت پرانتز باز و بسته در مقابل sizeof مینویسید ؛ دقت کنید که در این فرایند ، عبارت ، خروجی نمیدهد بلکه فقط در همین حد ارزیابی میشود که نوع داده نهایی چه خواهد بود و اندازه آن نوع داده را sizeof باز میگرداند مثلاً مینویسید :
|