میتوان تبدیل یک نوع به نوع دیگر را به صورت صریح انجام داد. این کار به کمک عملگر cast انجام میگیرد. پس ساختار cast نوع دیگر از تبدیل است. برای این کار کافی است نوع جدید داده مورد نظر را در داخل پرانتز مستقیماً جلوی عبارت قرار دهیم؛ برای مثال
k = (float)2 ;
مقدار صحیح ۲ را قبل از اختصاصدادن به k به float تبدیل میکند و سپس آن را به k اختصاص میدهد. بنابراین، اپراتور cast اپراتور یکانی است؛ یعنی فقط یک اپراند دارد.
در موارد متعددی روش casting خیلی مفید است. برای مثال حالت زیر را درنظر بگیرید.
int i =2 , k =3 ;
float h = k / i ;
در اینجا مقدار k / i (یعنی ۳ / ۲) برابر ۱٫۵ خواهد شد. سپس نتیجه به float یعنی ۱٫۰ تبدیل و به h نسبت داده میشود. حال میخواهیم مقدار ۱٫۵ را که نتیجه واقعی عبارت ریاضی ۳/۲ است به k و i یا هر دوی آنها را با cast به float تبدیل کنیم، مثلاً
(float) k / i ;
در اینجا بهطور صریح k به float تبدیل میگردد، پس نتیجه برابر ۱٫۵ خواهد شد. عبارت مزبور را میتوان به صورت k / (float) i ; یا (float) k / (float) i ;نیز نوشت که نتیجه باز هم ۱٫۵ میگردد، یعنی نتیجه سه روش مزبور همارز است.
از مثالهای بالا نتیجه میشود که به کمک casting میتوان در وسط جمله نوع داده را به نوع دیگری تبدیل کرد. بنابراین اپراتور cast بهعنوان نوع یا type عمل میکند؛ یعنی type conversion است و فرمت آن بهاین طریق است که نوع جدید متغیر یا عبارت مورد نظر جلوی آن متغیر یا عبارت در داخل پرانتز نوشته شود. برای مثال دستور (int)d1+d2 یعنی اول d1 به int تبدیل میشود بعد با d2 جمع میشود. درحالی که دستور (int)(d1+d2) یعنی نتیجه d1+d2 به int تبدیل میشود.
بنابراین فرمت اپراتور cast به صورت زیر است.
(data type) expression
حال برای آنکه نقش اپراتور cast را بهتر متوجه شوید، به نتیجه و عملکرد دو مجموعه دستورهای زیر توجه کنید.
در مثال اول برای متغیر x که از نوع float اعلان شده است، ۴ بایت حافظه پیشبینی میشود. ولی در نتیجه اجرای دستور printf سطر دوم، به دلیل دستور (int)x مقدار آن به نوع int تبدیل میگردد و نمایش داده میشود. بنابراین، اگر برای مثال محتوای حافظه بهصورت
۰٫۲۶ E+7
باشد، مقدار ۲۶۰۰۰۰۰ نمایش داده خواهد شد.
همینطور در مثال دوم برای متغیر x که از نوع short int اعلان شده است، ۲ بایت حافظه پیشبینی میشود، ولی درنتیجه اجرای دستور printf سطر دوم، به دلیل (char)x مقدار آن به نوع کاراکتر تبدیل میگردد و محتوای دو بایت حافظه مزبور بهصورت یک رشته دوبایتی نمایش داده میشود. به همین دلیل است که در فرمت چاپ مقدار متغیر مزبور، از فرمت “%s” که برای رشته است استفاده شده است. حال اگر برای مثال محتوای حافظه مربوط به متغیر x به صورت ۱ ۲ ۳ ۴ باشد، موقع نوشتن به صورت رشته “۱ ۲ ۳ ۴” چاپ میشود.
در اینجا به اختصار یادآور میشویم که فرمتهای “%s”, “%c”, “%f”, “%d” به ترتیب برای متغیرهای از نوع مقادیر صحیح، اعشار، کاراکتر و رشته به کار میروند.