PDA

View Full Version : سوال: کار برد انواع حالات انتساب آدرس متغییر(معمولی و ثابت) به اشاره گر(معمولی و ثابت) ؟



md3848
چهارشنبه 28 بهمن 1394, 02:09 صبح
سلام
دوستان اگه امکان داره کاربرد هر کدوم از موارد زیر رو بگین.


اشاره گر و متغییر
اشاره گر ثابت و متغییر >>>>> مثلا برا آرایه ها از این نوع استفاده میشه کرد.
اشاره گر و متغییر ثابت
اشاره گر ثابت و متغییر ثابت

K-FIVE
چهارشنبه 28 بهمن 1394, 09:34 صبح
سلام
دوستان اگه امکان داره کاربرد هر کدوم از موارد زیر رو بگین.


اشاره گر و متغییر
اشاره گر ثابت و متغییر >>>>> مثلا برا آرایه ها از این نوع استفاده میشه کرد.
اشاره گر و متغییر ثابت
اشاره گر ثابت و متغییر ثابت



درود / در این رابطه 4 حالت هست
2 حالت برای داده ثابت
2 حالت برای ادرس ثابت (اشره گر ثابت)
کمی از نظر تءوری درک شدنی نیست و باید خوب اشاره گر هارو بفمی

for example, we have int i = 5;

اشاره گر غیر ثبت به داده غیر ثابت :
این اشاره گر قابل تغییر است و داده ای هم ک به اشاره دارد قابل تغیر است
int* ptr = &i

اشاره گر غیر ثابت به داده ثابت :
این اشاره گر قابل تغییر است اما این اشره گر نمیتوان این اداده را تغیر دهد
const int* prt = &i

اشاره گر ثابت به داده غیر ثابت :
اشاره گر قابل تغیر نیست اما می توان داده ان را عوض کرد
int* const ptr = &i

اشاره گر ثابت به داده ثابت :
نه داده و اشاره گر هیچ کدام را نمی توان عوض کرد
const int* const ptr = &i

zero_ox
چهارشنبه 28 بهمن 1394, 11:24 صبح
سلام .
کاربرد عملیش برای جلوگیری ازتغییرات ناخواسته داده هاست بیشترین میزان دسترسی عملا با اشاره گرغیرثابت به داده غیر ثابت داریم که خوب نیست دربسیاری ازموارد وکمترین میزان رو درحالتی که اشاره گرو داده هردوثابت باشند .
انواعش رو دوستمون بالا گفتن من فقط چند خط کد قرار می دم تا روشن تر بشه .
قسمت هایی که توسط کامپایلر خطا گرفته می شه رو کامنت کردم .

// Example program
#include <iostream>
int main()
{
// اشاره گر غیرثابت به داده غیرثابت
int x=5,y=10;
int *p=&x;
p=&y;
++x;
++y;
// اشاره گر غیرثابت به داده ثابت
const int a=5,b=10;
const int *p1;
p1=&a;
p1=&b;
//++a;
//++b;
//اشاره گر ثابت به داده غیرثابت
int c=5,d=10;
int*const *p2;
//p2=&c;
//p2=&d;
++c;
++d;
//اشاره گر ثابت به داده ثابت
const int e=5,f=10;
int const * const *p3;
//p=&e;
//p=&f;
//++e;
//++f;
}




فرض کن داده رو به صورت رفرنس به یه تابع ارسال کنیم تابع می تونه داده رو تغییربده به این صورت :

#include <iostream>
using namespace std;
int display (int &x){
++x;
return x;
}
int main() {
int x=5;
cout<<display(x);


}




همانطور که می بینی مقدار x تغییر کرد حالا به const کردن پارامتر تابع مانع ازتغییر داده در تابع می شیم .(قسمتی کامنت شده برای جلوگیری از خطا هست .)

#include <iostream>
using namespace std;
int display(const int &x){
//++x;
return x;
}
int main() {
int x=5;
cout<<display(x);


}

md3848
پنج شنبه 29 بهمن 1394, 17:04 عصر
فقط همین سطح دسترسی؟
کاردی چیزی مد نظر ندارید؟
مثلا رشته ها و آرایه ها با اشاره گر ثابت به یه متغییر ساخته میشن
با اون 3 تای دیگه میشه چیکار کرد؟
من اینو هنوز متوجه نشدم

zero_ox
شنبه 01 اسفند 1394, 10:23 صبح
می تونید این صفحات رو هم ببینید
http://www.cprogramming.com/tutorial/const_correctness.html

http://www.technovisitors.com/2014/04/Importance-of-Constants-in-C.html