PDA

View Full Version : سوال: سوال در مورد ساختار سینتکس دلفی



Mask
شنبه 18 آذر 1391, 20:56 عصر
با سلام.
فارغ از سینتکس دلفی :
چرا نمیشه اینجوری کد نوشت :

StrToInt(Edit3.Text):=StrToInt(Edit1.Text)+StrToIn t(Edit2.Text);

Felony
شنبه 18 آذر 1391, 21:06 عصر
حاجی بیخیال شو ... D:

StrToInt یا ... یک تابع هست ، تابع مقدار برمیگردونه نه اینکه مقداری به اون صورت بگیره !

Ananas
شنبه 18 آذر 1391, 23:47 عصر
یک سوال:
فرضا اگه این رو از شما قبول کنه می خوای چطور از عبارت ساخته شده استفاده کنی؟ شما هیچ جور به اون دسترسی نداری. به فرض جمع زد مقدارشم ریخت تو متغیر سمت چپ، حالا چطور متغیر سمت چپ رو داری؟
چیزی که بنده می دونم اینه که این مسوله برمیگرده به آدرس حافظه و مقدار. در واقع وقتی عبارتی رو در سمت چپ مساوی می نویسید دارید آدرس اون متغیر رو به برنامه معرفی میکنید تا اطلاعات حاصل از عبارت سمت راست رو بعد از محاسبه بریزه تو جایی که در سمت چپ مساوی بهش معرفی کردیم. حالا بر می گردیم به عبارتی که شما نوشتید : تابع سمت چپ داره یک مقدار صحیح بر می گردونه (به کجا؟) و شما آدرس حافظه ای بهش معرفی نکردید که اون رو بریزه توی اونجا. حالا فرض کنید تابع زیر رو تعریف کنیم :

function CreatePointerFromInt(const i : Integer):PInteger;
begin
Result := AllocMem(SizeOf(Integer));
Result^ := i;
end;

بعد بنویسیم :
CreatePointerFromInt(StrToInt('1'))^ := StrToInt('2') + StrToInt('3');
دیگه ارور نمیده. ولی خوب به درد هم نمیخوره چون اون آدرس رو به عنوان متغیر یا اشاره گر در جایی ذخیره نکردیم و بعد از محاسبه از کنترلمون خارجه. مگر اینکه اون رو جایی مثل داخل اون تابع ذخیره کنید تا بعدا استفاده بشه.
در کل میشه گفت ظاهرا از دید ما متغیر ها و مقادیرشون ، یکی هستن و با هم برابرند (از نظر ریاضی وقتی میگیم x برابر مثلا 10 است، x همون 10 فرض می شود و هست) ولی کامپایلر اونها رو تو متن کد شما در موقعیت های مختلف متفاوت تفسیر میکنه (در جایی مقدار متغیر مد نظر هست در جایی آدرس متغیر).