1 ()
2 ! ~ ++ — sizeof
3 * / %
4 + -
5 « »
6 < <= > >=
7 == !=
8 &
9 ^
10 |
11 &&
12 ||
13 ?
14 = += -= *= /= %=
15 ,
2 ! ~ ++ — sizeof
3 * / %
4 + -
5 « »
6 < <= > >=
7 == !=
8 &
9 ^
10 |
11 &&
12 ||
13 ?
14 = += -= *= /= %=
15 ,
همینطور که در جدول بالا مشخص شد بالاترین تقدم عملگرها را پرانتز و پایین ترین تقدم را کاما دارا می باشند.
در جدول بالا ردیف هایی با چند عملگر وجود دارند. این بدین معنی است که از تقدم یکسانی برابر هستند، بنابر این اگر در عبارات محاسباتی به چند عملگر با تقدم یکسان برخورد کردیم تقدم بالاتر به عملگری میرسد که در سمت چپ دیگر عملگرها قرار دارد.
عبارات محاسباتی و تقدم و اولویت عملگرها در C++
در جدول بالا ردیف هایی با چند عملگر وجود دارند. این بدین معنی است که از تقدم یکسانی برابر هستند، بنابر این اگر در عبارات محاسباتی به چند عملگر با تقدم یکسان برخورد کردیم تقدم بالاتر به عملگری میرسد که در سمت چپ دیگر عملگرها قرار دارد.
عبارات محاسباتی و تقدم و اولویت عملگرها در C++
اشاره گر : متغیری است که آدرس خانه های سیستم را در خود نگه می دارد (آدرس هر متغیر در حافظه اشاره گر است) .
متغیر هایی را که تا کنون با هم تعریف کردیم جدای از نوعشان همگی در خانه های حافظه ذخیره می شوند و هر کدام با توجه به طول نوع تعدادی از خانه ها را در حافظه اشغال می کنند .
متغیر هایی را که تا کنون با هم تعریف کردیم جدای از نوعشان همگی در خانه های حافظه ذخیره می شوند و هر کدام با توجه به طول نوع تعدادی از خانه ها را در حافظه اشغال می کنند .
آدرس خانه های حافظه : حافظه کامپیوتر از مجموعه ای از بایتهایی که هر کدام شامل 8 بیت هستند تشکیل شده است. برای دسترسی به هر یک از این بایتها که به آنها خانه های حافظه گفته می شود شماره آدرسی وجود دارد که به ترتیب به هر یک داده می شود. به این شماره ردیف ها آدرس خانه حافظه گفته می شود .
آدرس متغیر : آدرس اولین بایت از حافظه که به یک متغیر اختصاص می یابد آدرس آن متغیر نامیده می شود .
می دانیم که متغیر ها در حافظه ذخیره می شوند اما مقدار حافظه مورد نیازشان با یکدیگر متفاوت است :
char : 1 Byte
int : 2-4 Byte
float : 4 Byte
double : 8 Byte
مثلا اگر ما متغیری از نوع int را تعریف کنیم 2 یا 4 بایت را اشغال می کند و به این معنی است که تعداد 4 تا 8 خانه پشت سر هم از حافظه را اشغال می کند که آدرس آن اولین آدرس خانه حافظه در نظر گرفته خواهد شد .
می دانیم که متغیر ها در حافظه ذخیره می شوند اما مقدار حافظه مورد نیازشان با یکدیگر متفاوت است :
char : 1 Byte
int : 2-4 Byte
float : 4 Byte
double : 8 Byte
مثلا اگر ما متغیری از نوع int را تعریف کنیم 2 یا 4 بایت را اشغال می کند و به این معنی است که تعداد 4 تا 8 خانه پشت سر هم از حافظه را اشغال می کند که آدرس آن اولین آدرس خانه حافظه در نظر گرفته خواهد شد .
در مورد مزایای استفاده از اشاره گرها در C++ یا زبانهای برنامه نویسی دیگر همین قدر باید بگم که چیز خوبیه و سرعت، کارایی، دسترسی و ... را بالا می برد .
آدرس حافظه را فقط می توان در یک متغیر از نوع اشاره گر تعریف نمود :
Type *Name;
int *P;
آدرس حافظه را فقط می توان در یک متغیر از نوع اشاره گر تعریف نمود :
Type *Name;
int *P;
چنانچه در بالا می بینیم برای تعریف متغیری از نوع اشاره گر، ابتدا نوع آن و سپس نام که از قانون نامگذاری برای متغیرها تبعیت می کند استفاده خواهیم کرد با این تفاوت که قبل از نام از علامت * برای نشان دادن تعریف اشاره گر بهره می گیریم .
p متغیر اشاره گری از نوع int است .
p آدرس خانه هایی از حافظه را نگهداری می کند که محتویات آن خانه ها، مقادیری از نوع int هستند .
p متغیری است که به محل هایی از حافظه که محتویاتی از نوع int دارد اشاره می کند .
p آدرس خانه هایی از حافظه را نگهداری می کند که محتویات آن خانه ها، مقادیری از نوع int هستند .
p متغیری است که به محل هایی از حافظه که محتویاتی از نوع int دارد اشاره می کند .
دقت کنید که نوع یک اشاره گر به نوع متغیرهایی که به آدرس آنها اشاره می کند بستگی دارد و باید با آن یکسان باشد. یعنی نوع اشاره گری که به آدرسهایی که شامل متغیر هایی از نوع duoble است نمی تواند int یا char یا هر چیز دیگری غیر از همان duoble باشد .
عملگرهای اشاره گر در C++ : عملگر & : این عملگر دارای یک عملوند است و آدرس عملوند خود که نام یک متغیر است را مشخص می نماید . عملگر * : این عملگر هم دارای یک عملوند است و محتویات (مقادیر) جایی که عملوندش (نام اشاره گر) به آنجا اشاره می کند را مشخص می کند .
int *pointer; // تعریف یک اشاره گر از نوع int int x,y; x =9; pointer = &x; //قراردادن آدرس متغیر x y = *pointer; // قراردادن اشاره گر در متغیر y
در کد C++ بالا در خط اول و دوم 3 متغیر از نوع int که یکی از آنها یک اشاره گر است تعریف شده اند. خط سوم مقدار 9 را در متغیر x قرار می دهد. متغیر x با مقدار 9 در جایی از حافظه ذخیره شده است که خط چهارم آدرس آن محل را در متغیر اشاره گر pointer قرار می دهد یعنی pointer به جایی اشاره می کند که متغیری بنام x و از نوع int که مقداری برابر 9 را دارد اشاره می کند. در آخرین خط محتویات جایی که آدرس آن در اشاره گر pointer ذخیره شده است در متغیر y قرار می گیرد یعنی مقدار 9 .
عملیات روی اشاره گرها
کلا 3 نوع عمل را می شود بر روی pointer انجام داد :
1. انتساب اشاره گر ها به همدیگر
2. اعمال محاسباتی جمع و تفریق
3. مقایسه
کلا 3 نوع عمل را می شود بر روی pointer انجام داد :
1. انتساب اشاره گر ها به همدیگر
2. اعمال محاسباتی جمع و تفریق
3. مقایسه
انتساب اشاره گرها به همدیگر :
وقتی دو اشاره گر (pointer) را برابر با یکدیگر قرار دهیم با 2 حالت مواجه خواهیم شد، یکی آدرس و دیگری مقدار است. به کد زیر دقت نمایید :
وقتی دو اشاره گر (pointer) را برابر با یکدیگر قرار دهیم با 2 حالت مواجه خواهیم شد، یکی آدرس و دیگری مقدار است. به کد زیر دقت نمایید :
int *p1, *p2, *p3, a, b, c;
a = 50;
b = 100;
c = 200;
p1 = &a;
p2 = &b;
p3 = &c;
*p1 = *p2;
p1 = p3;
a = 50;
b = 100;
c = 200;
p1 = &a;
p2 = &b;
p3 = &c;
*p1 = *p2;
p1 = p3;