View Full Version : سوال: کاربرد اشارگرهای * , &
IMANAZADI
جمعه 03 تیر 1390, 08:06 صبح
با سلام
میخواستم بدونم کاربرد علامت * و & در vc++ چیه
میدونم اشارگر هستند
کاربردش چیه و چه جاهایی باید استفاده بشند
مثال زیر را در نظر بگیرید
char *p = "hello"
لطفا یه جوری کامل و روان توضیح بدید که هم من و سایرین که شاید دنبال این مطلب هستند متوجه بشند
با تشکر:تشویق:
IMANAZADI
چهارشنبه 22 تیر 1390, 13:59 عصر
کسی نیست بعد از این مدت جواب بده ؟
koobesh
چهارشنبه 22 تیر 1390, 21:47 عصر
سلام
این برنامه رو واستون می ذارم. روش خوب فکر کنین. دیباگش کنین. متغیرها، پوینترها و رفرنس ها رو
دقت کنین. خوب که بهش دقت کردین سوالاتونو بپرسین. من و دوستان کمکتون می کنیم. انشاالله
به بحث شیرین :چشمک: پوینتر و رفرنس رفته رفته مسلط میشین.
roteil
پنج شنبه 23 تیر 1390, 13:46 عصر
اشاره گر متغیری است که آدرس حافظه در آن نگهداری می شود
نحوه تعریف : نام اشاره گر * نوع
int *ip;
مفهموم این عبارت این است که محتوی اشاره گر ip که یک آدرس است را استخراج کرده ودر حافظه ای که آدرس آن را بدست آورده ایم عدد 10راقرار دهیم *ip=10;
راه های مقدار دهی یک اشاره گر
1.انتساب یک عدد به صورت صریح :تنها عددی که می توان به صورت صریح به یک اشاره گر انتساب داد null یا \0
null یعنی اینکه اشاره گر به هیچ آدرسی از حافظه اشاره نمی کند.
ip=1000; غلط
2.استفاده از آدرس یک متغیری که قبلا تعریف شده است:برای این منظور از عملگر & استفاده می شود.
#include <iostream>
#include <conio.h>
using namespace std;
void main (){
int x;
int *amir;
amir=&x;
//*amir=20; این یا کد پایینی
x=20;
cout<<"amir= "<<amir <<"x= "<<x;
getch();
}
اگر کد بالا را اجرا کنید مبینید که اول آدرس حافظه چاپ و بعد از عددی که در آن قرار گرفته است چاپ می شود.
3.با استفاده از فرمان new می توان حافظه ی جدید گرفته وآدرس آن را به یک اشاره گر انتساب داد نکته ی بسیار مهم در این روش این است که اختصاص حافظه ی جدید به برنامه در زمان اجرا خواهد بود.
#include <iostream>
#include <conio.h>
#include <assert.h>
using namespace std;
void main (){
int x;
cin>>x;
int *amir;
amir=new int [x];
assert(amir); //assert(amir!=0یا NULL); if(amir) {یا کلا به جای دستور اسرت از ;{دستوارت ;
for(int j=0;j<x;j++)
cin>>amir[j];
for(int j=0;j<x;j++)
cout<<endl<<"Memory Adress:"<<amir<<" Amir array="<<amir[j];
getch();
}
پس از استفاده از فرمان new اگر حافظه به درستی به اشاره گر اختصاص داده شو آدرس حافظه ای که معتبر است در اشاره گر قرار گرفته ودر غیر این صورت محتوی اشاره گر null خواهد بود بنابراین ضروری است که پس از استفاده از این فرمان از تخصیص درست حافظه اطمینان حاصل کرده برای این منظور از فرمان شرط یا از دستور assert استفاده می کنیم.
اینم یک مثال از کاربرد اشاره گر در فراخوانی ارجاعی
#include <iostream>
#include <conio.h>
using namespace std;
void swap (int &x,int &y)
{ int t;
t=x;
x=y;
y=t;}
void main (){
int a=10,b=20;
cout<<"a="<<a<<" b="<<b<<endl;
swap(a,b);
cout<<"a="<<a<<" b="<<b;
getch();}
#include <iostream>
#include <conio.h>
using namespace std;
//------------------------------------------------------------------------
void swap(int *x,int *y)
{
int t=*x;
*x=*y;
*y=t;
}
//------------------------------------------------------------------------
void main()
{
int a=10,b=20;
cout << " a=" << a << " b=" << b << endl;
swap(&a,&b);
cout << " a=" << a << " b=" << b << endl;
getch();
}
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.