امتیاز موضوع:
  • 7 رأی - میانگین امتیازات: 4.43
  • 1
  • 2
  • 3
  • 4
  • 5
آموزش مبتدي تا پيشرفته زبان C++ - C
نویسنده پیام
dreamvbfox آفلاین
در حال پیشرفت
***

ارسال‌ها: 426
موضوع‌ها: 44
تاریخ عضویت: مرداد ۱۳۸۷

تشکرها : 236
( 1251 تشکر در 361 ارسال )
ارسال: #23
RE: آموزش زبان سی | C Learning
سلام .
بازم اومدمLaugh
تو این تاپیک آرایه های چند بعدی رو توضیح میدم . همش چندتا خطه !Happy

آرایه های چند بعدی
کد:
نوع آرایه نام آرایه [بعد 1] [بعد 2] ;
کد:
int x[3][4];
توضیح : ارایه ی بالا 12 تا خونه داره (3*4 006 ) . این آرایه رو میشه به صورت زیر نمایش داد :
[تصویر:  xircyz26udr8zy8biu4.jpg]
بعد 1 رو سطر و بعد 2 رو ستون میگن.
یکی ویژگی هایی که زبان c داره اینه که هیچ محدودیتی تو تعداد بعد نداره یعنی میتونید nتا بعد بسازید. (تو ویبی فقط 60 تا بعد امکان پذیر است.)
مثال : برنامه جدول ضرب هست . (سورس ضمیمه شد! 017 )

آرایه های 2بعدی به عنوان آرگومان تابع
هیچ فرقی با یک بعدی نداره ! فقط چندتا نکته داره که بعد از دیدن این تصویر بهتون میگم .
[تصویر:  eygz31ybvdm0fxow3pbe.jpg]
توضیح : همان طور که قبلا گفتم هنگام استفاده آرایه ها در آرگومان توابع، 2 شکل وجود داره یا با طول ثابت (تابع f1) و یا به صورت طول نامشخص(f2) . در طول نامشخص(آرایه 2بعدی) نوشتن تعداد ستون الزامی هست !!!!

مقدار اولیه آرایه ها
اگر آرایه ای خارج از تابع اصلی main تعریف بشه یعنی به صورت عمومی مقدار اولیه اون صفر و در غیر این صورت تعریف نشده خواهد بود. و ما هنگام تعریف آرایه ها میتونیم مقدار اولیه به اونا بدیم :
[تصویر:  2q6mvnzlrr1drmuhz75x.jpg]
مثال :
کد:
int x[4] ={1,2,3,4};
و مثالی واسه آرایه ای چند بعدی :
int y[2][3]={2,5,4,6,11,8};
2*3 میشه 6 تا خونه 6 تا عدد رو بریزین 2 آرایه ! 012

یه نکته ی دیگه :
کد:
int x[] = {4,10,1};
تو مثال بالا 3 تا عدد داریم میریزیم تو آرایه x ! پس تعداد خونه های این آرایه هم برابر با 3 میشه ! 010

آموزش های مربوط به آرایه ها تموم شد Clap
تو جلسه بعدی درباره رشته ها که شامل کپی ، حذف ، الحاق ، آرایه ای از رشته ، ... میشه توضیح خواهم داد. 006

به امید دیدار. 028
موفق باشید. 038


فایل‌(های) پیوست شده
.rar   Example.rar (اندازه: 329 bytes / تعداد دفعات دریافت: 137)

Biggrin Use Google instead of asking stupid questions Biggrin

[/url]
CMC Automation System


آموزش زبان c++
[url=http://www.iranled.com/forum/thread-13923.html]

۰۲-شهریور-۱۳۸۸, ۱۴:۵۳:۰۴
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : yazddownload, محمد حسینی, lord_viper, sita_rampail, t3r!p3000, ali_asrami, alvandian110, emankhan, salman_looloo
dreamvbfox آفلاین
در حال پیشرفت
***

ارسال‌ها: 426
موضوع‌ها: 44
تاریخ عضویت: مرداد ۱۳۸۷

تشکرها : 236
( 1251 تشکر در 361 ارسال )
ارسال: #24
RE: آموزش زبان سی | C Learning
سلام.
رشته ها 016

در C برای تعیین انتهای رشته از کاراکتر خاصی به نام تهی یا null استفاده میشه و با '0\' نمایش داده میشه !
کد:
char h[10];
در خط بالا ما آرایه ی h رو از نوع رشته تعریف کردیم . نکته ای که اینجا وجود داره اینه که این آرایه تنها 9 تا خونه شو به ما میده تا کاراکتر ها رو توش ذخیره کنیم زیرا خونه ی آخر بری نگهداری کاراکتر 0\ هست که انتهای رشته رو مشخص میکنه پس همیشه یکی خونه بیشتر از اونی که بهش نیاز دارید تعریف کنید تا دچار مشکل نشید.

مقدار اولیه دادن به رشته ها
وقتی که مقدار اولیه به رشته ها میدیم میتونیم تعداد خونه ها رو خالی بزاریم در نتیجه اندازه ی آرایه برابر با مقدار کاراکتریه که ما بهش نسبت دادیم.
به این 2 مثال توجه کنید :
کد:
char x[]="IRANLED";
char y[]={'I','R','A','N','L','E','D','\0',}
خوب تو خط اول : اگر به این صورت تعریف کنید و مقداردهی کنید خودش به صورت اتوماتیک به آخر آرایه 0\ اضافه میکنه و تعداد خونه ها هم برابر با تعداد رشته ای میشه که بهش دادیم.
خط دوم : تو این روش باید کاراکتر ها رو جدا جدا وارد کنیم و حتی کاراکتر 0\ رو نیز باید خودمون وارد کنید یعنی الزامی است . به نظرم از روش اول استفاده کنید بهتره .

خواندن رشته با استفاده از تابع gets()
این تابع که در فایل String.h قرار داره فقط به درد آرایه های رشته ای میخوره :
کد:
char x[100];
gets(x);
روش استفاده شم که دیدید آسونه 010

تفاوت gets با scanf
در تابع gets تنها enter آخر جمله رو مشخص میکنه لذا این تابع میتونه فاصله و tab رو هم دریافت کنه اما تابع Scanf تا زمانی که به tab یا فاصله رسید دست از دریافت رشته میگیره (درحالی که enter کنید به خط بعد میره !) برای اینکه بهتر متوجه بشید به مثال زیر توجه کنید :
کد:
cahr s[50];
gets(s);
scanf("%s",s);
اگر رشته ی
کد:
salam iranvig
رو وارد کنیم دستور gets اینو دریافت میکنه :
کد:
salam iranvig
اما اگر چیزی که تابع scanf دریافت کرده رو چاپ کنید اینه :
کد:
salam
نکته : اگر از دستور Scanf استفاده میکند و دارید رشته دریافت میکنید نیازی به نوشتن علامی & قبل از نام متغیر نیست.

چاپ رشته با استفاده از تابع puts()
روش استفاده :
کد:
puts(متغیر رشته ای);
این تابع هم در فایل String.h قرار داره اصلا هر کاری که با رشته ها داریم باید این تابع رو صدا بزنیم !

رشته ها به عنوان آرگومان تابع
همانند آرایه ها هست که تو آرگومان به کار میبردیم هیچ فرقی نداره . تو سورس هایی که ضمیمه میکنم میتونید بیشتر باهاش آشنا بشید003

نکته :
کد:
for(i=0;x[i];i++)
اگر x ارایه ای از نوع رشته باشه این حلقه for به تعداد کاراکتر های موجود تکرار میشه ! اگر اینو بلد باشید میتونید واسه خودتون یه تابع led بنویسید که تعداد کاراکتر های یک رشته رو معین میکنه !

انتساب رشته ها
اگر متغیر x و y ار نوع عددی باشند میتونیم با استفاده از دستور x=y مقدار y رو داخل x بریزیم تا باهم مساوی بشن ! اما واسه رشته ها چی ؟؟؟ خوب امتحان کنید error میده 007 شما واسه اینکار باید یه تابع که در فایل string.h هست به نام strcpy رو فراخوانی کنید .
کد:
strcpy (str1,str2);
در مثال بالا متغیر str1 برابر با متغیر str2 میشه ! یعنی مقادیر Str2 در str1 کپی میشه !
نکته : اگر str2 از str1 بیشتر باشه تا اونجایی که بتونه کپی میکنه و بقیه اون رو میزیره بعد از متغیر Str1 پس اگر متغیری بعد str1 تعریف شده باشه محتوای اون از بین میرهConfused
ما میتونیم این دستور strcpy رو یه ذره پرکاربردش کنیم . یعنی میتونیم در بگیم کجای Str1 (آرگومان 1) paste بشه ! یا از کجای str2 (آرگومان 2) کپی بگیره ! به مثال زیر دقت کنید :
کد:
int position=5;
char x[]="Salam IranVig";
strcpy(&x[position],&x[position+1]);
توضیح : تو خط سوم ارگومان
کد:
x[position+1]
از کاراکتر 6 ام به بعد کپی میگیره (اندیس از صفر شروع میشه) و در آرگومان اول دستور :
کد:
x[position]
میگه که از اندیس 5 به بعد کپی ها رو paste کن ! به نظر شما خروجی چی میشه ؟؟؟ معلومه فاصله ی بین 2 کلمه حذف میشه ! (سورس ضمیمه شد Example1 )
نکته: اگر از روش بالا استفاده کنید باید حتما علامت & رو قبل از متغیر ها قرار بدید تا اینکه خونه ی اون شماره اندیس رو در بیاره و عملیات رو روی اون انجام بده

مقایسه رشته ها
اگر بخواهیم 2 متغیر از نوع عددی رو با هم مقایسه کنیم از دستور x==y استفاده میکنیم اما واسه رشته باید از تابع strcmp که در فایل String.h قرار داره استفاده کنیم :
کد:
strcmp(str1,str2);
اگر این دستور رو اجرا کنید یه عددی رو به برمیگیردونه ! اگر اون عدد صفر بود یعنی Str1 و str2 باهم برابرند اگر عددی کوچکتر از صفر یود (اعداد منفی) یعنی str1 از str2 کوچکتر است و اگر عددی مثبت ، بزرگتر از صفر بود یعنی Str1 از Str2 بزرگتر مبباشد !

الحاق رشته ها
برای الحاق یا بهم چسبوندن دو تا رشته هم باید از تابع strcat استفاده کنیم که در فایل String.h قرار داره.
کد:
strcat(str1,str2);
این دستور مقدار Str2 رو به انتهای str1 میچسبونه ! و اگر متغیر str1 گنجایش رشته ی جدید و یا الحاق شده رو نداشته باشه تا اونجایی که میشه الحاق میکنه و بقیه رشته رو هم بعد از متغیر str1 میریزه که بازم اگر بعد از Str1 متغیری تعریف شده باشه مقدار اون از بین میره ! 013

آرایه های چند بعدی از نوع رشته 043
از نظر تعریف هیچ فرقی با نوع عددی نداره !
مثلا میخوایم اسم 5 دانشجو رو که حداکثر طول اسمشون 20 هست رو ذخیره کنیم باید آرایه رو به این صورت تعریف کنیم :
کد:
char x[5][20];
این یعنی 5 تا سطر (5 تا دانشجو ) و 20 هم طول هر سطر هست . تو ذهنتون یه جدول با این سطر رو ستون در نظر بگیریدAmaze
و اگر خواستید اسم دانشجوها رو بگیرید با استفاده از حلقه for که 0 تا 4 تکرار میشه میتونید از دستور :
کد:
gets(x[i]);
هر سطر رو پر کنید !

2 تا سورس متفرقه هم ضمیمه میکنمAmaze
Example 2 : سورسی است که یه رشته ای رو از ورودی میگیره و حروف کوچک اونو به حروف بزرگ تبدیل میکنه !
Example 3 : تابع replace هست که میدونید چیه !Whistle

آموزش مربوط به رشته ها تموم شد ! 006006006006
تو بحث بعدی شاید درباره اشاره گر ها توضیح مختصری بدم و بعد کار با فایل رو شروع کنیم . 010

فعلا خدانگدار. 028


فایل‌(های) پیوست شده
.rar   Example1.rar (اندازه: 339 bytes / تعداد دفعات دریافت: 129)
.rar   Example 2.rar (اندازه: 391 bytes / تعداد دفعات دریافت: 155)
.rar   Example 3.rar (اندازه: 413 bytes / تعداد دفعات دریافت: 126)

Biggrin Use Google instead of asking stupid questions Biggrin

[/url]
CMC Automation System


آموزش زبان c++
[url=http://www.iranled.com/forum/thread-13923.html]

(آخرین ویرایش در این ارسال: ۰۵-شهریور-۱۳۸۸, ۱۶:۳۲:۴۱، توسط dreamvbfox.)
۰۵-شهریور-۱۳۸۸, ۱۶:۲۶:۰۲
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : محمد حسینی, lord_viper, yazddownload, mohamadvb, sita_rampail, t3r!p3000, ali_asrami, alvandian110, keivanjan, emankhan, salman_looloo
dreamvbfox آفلاین
در حال پیشرفت
***

ارسال‌ها: 426
موضوع‌ها: 44
تاریخ عضویت: مرداد ۱۳۸۷

تشکرها : 236
( 1251 تشکر در 361 ارسال )
ارسال: #25
RE: آموزش زبان سی | C Learning
سلام دوستان .
شرمنده كه دير ميام Shy
راستي تمامي عكس هايي كه آپلود كردم چيز شدن يعني Fيlتr شدن !!!! ميتونيد از چيزشكن استفاده كنيد تا عكس ها رو ببينيد تو آموزش هاي بعدي رو يه سايت ديگه آپلود مي كنم.

تو اين فايل آموزشي درباره اشاره گرها توضيح داده شده:006

  • متغير اشاره گر
  • حافظه پويا
  • محاسبات روی اشاره گر
  • اشاره گر به آرايه
  • اشاره گر به ساختمان
  • اشاره گر به اشاره گر
  • اشاره گر به تابع
  • اشاره گر و پارامتر مرجع
  • ارگومان های خط فرمان

لطفا بخونيد من بعدا ميام توضيح ميدم.Whistle
موفق باشيد


فایل‌(های) پیوست شده
.pdf   CPP Pointers.pdf (اندازه: 238.99 KB / تعداد دفعات دریافت: 329)

Biggrin Use Google instead of asking stupid questions Biggrin

[/url]
CMC Automation System


آموزش زبان c++
[url=http://www.iranled.com/forum/thread-13923.html]

(آخرین ویرایش در این ارسال: ۱۰-اسفند-۱۳۸۸, ۱۱:۱۱:۵۲، توسط dreamvbfox.)
۱۰-اسفند-۱۳۸۸, ۱۰:۱۹:۳۳
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : lord_viper, kaboy, t3r!p3000, ali_asrami, alvandian110, emankhan, CONTOROLER
dreamvbfox آفلاین
در حال پیشرفت
***

ارسال‌ها: 426
موضوع‌ها: 44
تاریخ عضویت: مرداد ۱۳۸۷

تشکرها : 236
( 1251 تشکر در 361 ارسال )
ارسال: #26
RE: آموزش زبان سی | C Learning
سلام دوستان .
به دليل مشغله ي كاري كه دارم نتونستم خودم بنويسم. 006
اگه مشكلي چيزي بود پيغام بزنيد بيام توضيح بيشتري بدم .009

اشاره گرها در زبان ++C


یکی از مهمترین مباحث کاربردی هر زبان برنامه نویسی اشاره گر و مفهوم آن است، که کاربرد گسترده ای در شاخه ساختمان داده ها نیز دارد. در این فرصت با مفهوم اشاره گر و همیطور روش تعریف آن در زبان ++C بیشتر آشنا می شویم. باید توجه داشته باشید که سوای روش تعریف اشاره گر در این زبان، کلیت مفهوم آن در بین تمام زبانها مشترک است.

فبل از شروع بحث دو مطلب مهم را یادآوری می کنم:

1- همانطور که می دانید تک تک بایتهای حافظه برای خود آدرسی دارند، که یک عدد صحیح و مثبت است. این آدرس دقیقا مانند کد پستی عمل می کند. یعنی کاملا منحصربفرد بوده، و می توان از آن برای ارجاع به بایت استفاده کرد.

2- هر متغیری پس از تعریف، متناسب با نوع خود چند بایت از حافطه را اشغال می کند. این بایتها همگی متوالی بوده و در حافظه پشت سر هم قرار دارند.

به زبان ساده، اشاره گر نوعی متغیر است که محتوای آن آدرس یکی از خانه های حافظه کامپیوتر است. به این مثال توجه کنید:

کد:
long int a;
long int *b;
b = &a;
دو خط اول متغیر a را به عنوان متغیر صحیح و b را یه اشاره گر صحیح معرفی می کنند. این تعریف اشاره گر به کامپایلر می گوید که آدرس موجود در اشاره گر b مربوط به یک متغیر صحیح است. توسط خط سوم آدرس متغیر a در b قرار می گیرد. مثلا اگه متغیر a بایتهای شماره 1000 تا 1003 را در اختیار داشته باشد، مقدار 1000 برای متغیر b در نظر گرفته می شود. اصطلاحا گفته می شود که اشاره گر b به a اشاره می کند. اینجا ممکن است دو سوال پیش بیاد: چرا فقط آدرس بایت اول در اشاره گر قرار می گیرد؟ و چرا برای اشاره گر نوع تعیین می شود؟ مگر نه اینکه آنها حاوی آدرس حافظه هستند؟ به چه دلیل نوع محلی که اشاره گر به آن اشاره دارد مشخص می شود؟

به مثال زیر توجه کنید:
کد:
long int a, *b, c;
a = 69355;
b = &a;
c = *b;

عبارت b* را بخوانید: "محتوای محلی که متغیر b به آن اشاره دارد". پس خط آخر مقدار ۶9355 را به c اختصاص می دهد (به کاربردهای متفاوت اپراتورهای & و * دقت کنید). فرض کنیم بایتهای شماره 1000 تا 1003 برای ذخیره کردن مقدار متغیر a استفاده شده باشند (متغیر از نوع long int در حالت استاندارد چهار بایت اندازه دارد). پس اشاره گر b مقدار 1000 را دارد. وقتی برنامه به خط آخر می رسد باید محتوای محلی را که b به آن اشاره می کند در c قرار دهد. اما از کجا متوجه می شود که علاوه بر بایت شماره 1000 باید سه بایت بعدی را هم استفاده کند؟ و چطور متوجه می شود که باید این چهار بایت را به صورت عدد صحیح تفسیر کند؟ ممکن است این چهار بایت مربوط به یک عدد اعشاری چهار بایتی float باشد. به همین خاطر است که نوع اشاره گر تعیین می شود. وقتی اشاره گر b از نوع long int مشخص شده است، برنامه متوجه می شود که باید از چهار بایت به صورت عدد صحیح استفاده کند. اگر تعیین نوع برای اشاره گر انجام نمی شد مشکلات زیادی به وجود می آمد. البته زبان برنامه نویسی ++C اشاره گرهای بدون نوع (void) هم دارد، که کاربرد اختصاصی خود را دارند.

مطمئنا کاربرد اشاره گرها تنها محدود به مثال بالا نمی شود! یکی از کاربردهای مهم اشاره گر مربوط به انتقال داده ها بین توابع مختلف در برنامه است. متغیرهایی که در حالت عادی به عنوان پارامتر به یک تابع ارسال می شوند، از تغییر پیدا کردن توسط تابع مصون هستند. چرا که تابع یک کپی از آنها را دریافت می کند. مثلا:

کد:
void func( int n )
{
  n++;
}
void main( )
{
  int n = 10;
  func( n );
  cout << n;
}

متغیر n مربوط به تابع func یک واحد افزایش پیدا می کند. اما این تغییر تاثیری در متغیر n در تابع اصلی ندارد. پس عدد 10 توسط cout به خروجی ارسال می شود. اما مواقعی هست که ما نیاز داریم بتوانیم مقدار متغیر را تغییر دهیم. مانند تابعی که دو متغیر را دریافت کرده و مقدار آنها را با هم عوض می کند. اینجا اشاره گر به کمک ما می آید:
کد:
void swap( int *a, int *b )
{
  int t;
  t = *a;
  *a = *b;
  *b = t;
}
void main( )
{
  int m = 15, n = 10;
  swap( &m, &n );
  cout << "m = " << m << " , n = " << n;
}
به جای محتویات متغیرهای m و n، آدرس حافظه آنها به تابع ارسال می شود. پس اشاره گر a به m و اشاره گر b به n اشاره می کنند. حال به مراحل مختلف تابع swap توجه کنید:

خط دوم: محتوای محلی که a به آن اشاره دارد (یعنی مقدار m) در t قرار می گیرد. پس t = 15.

خط سوم: محتوای محلی که b به آن اشاره دارد (یعنی مقدار n) به محلی که a به آن اشاره دارد (یعنی m) منصوب می شود. پس m = 10.
خط چهارم: محتوای t به محلی که b به آن اشاره دارد (یعنی n) منصوب می شود. پس n = 15.
بعد از اینکه کنترل به تابع اصلی باز می گردد، مقادیر m و n با هم عوض شده اند، و خروجی به این صورت است:
کد:
m = 10 , n = 15

اما مهمترین و اصلی ترین کاربرد اشاره گرها مربوط به کار با متغیرهای پویا است. متغیرهای عادی که در برنامه ها مورد استفاده قرار می گیرند ایستا هستند. یعنی حافظه آنها توسط خود برنامه اختصاص داده شده و در پایان نیز توسط خود برنامه آزاد می شوند. متغیرهای پویا عکس این حالت هستند. یعنی باید خودتان حافظه بگیرید و خودتان آزاد کنید! این نوع متغیر توسط اشاره گر کنترل می شود. به مثال ساده زیر توجه کنید:
کد:
void main( )
{
  int *p;
  p = new int;
  *p = 5;
  cout << *p;
  delete p;
}

توسط دستور new حافظه ای به عنوان عدد صحیح رزرو شده، و آدرس آن در اشاره گر p قرار می گیرد. بعد از انجام دادن هر عملیات دلخواهی روی مقدار ذخیره شده در این حافظه، با استفاده از دستور delete حافظه آزاد می شود.

تخصیص حافظه نیز دو کاربرد بسیار بسیار مهم دارد: آرایه های پویا و پیاده سازی ساختارهای مبجث ساختمان داده ها.

اشاره گر به نابع:

زمانی که یک برنامه اجرا می شود، کدهای مورد نیاز آن در حافظه اصلی کامپیوتر بارگذاری می شوند، تا اجرای آن با سرعت بیشتری انجام گیرد. بنابراین کدهای برنامه نیز همانند متغیرهای مورد استفاده در آن شامل آدرسی هستند. هر تابع هم بلوکی از حافظه را در اختیار می گیرد که آدرس شروع آن به عنوان آدرس تابع در نظر گرفته می شود. یک اشاره گر امکان نگه داری چنین آدرسی را نیز دارد.
تعریف چنین اشاره گری را با یک مثال نشان می دهم. فرض کنید تابعی به صورت زیر داریم:

کد:
long int func( int m, float n );

اشاره گر به چنین تابعی اینگونه تعریف می شود:

کد:
long int (*p)( int, float );

این تعریف مشخص می کند که p یک اشاره گر به مجموعه توابعی است که دو پارامتر به ترتیب از نوع int و float دارند و یک متغیر صحیح از نوع long int بر می گردانند. آدرس هر تابعی که چنین ساختاری داشته باشد می تواند در اشاره گر p قرار بگیرد. به قرار داده پرانتز در دو طرف تعریف اشاره گر p هم توجه داشته باشید. نبود این پرانتزها تعبیر دیگری را برای کامپایلر تداعی می کند که در نهایت به خطا منجر می شود.

پس از تعریف چنین اشاره گری، با دستور انتصابهای زیر می توانید آدرس تابعی را در آن قرار دهید:

کد:
p = func;
p = &func;


هر دو دستور آدرس تابع func را در اشاره گر p قرار می دهند.
پس از این مقدار دهی می توانید از اشاره گر برای فراخوانی تابع به صورت زیر استفاده کنید:

کد:
cout << p( 6, 7.5 );

این خط معادل دستور زیر است:

کد:
cout << func( 6, 7.5 );
اشاره گر به توابع کاربردهای ویژه ای دارد که بحث جداگانه ای را می طلبد.

اشاره گر به ساختمان و کلاس:
متغیرهای تعریف شده از ساختمانها و کلاسها نیز همچون متغیرهای عادی فضایی در حافظه کامپیوتر در اختیار می گیرند که می توان اشاره گر به آنها تعریف کرد. فرض کنید ساختمانی با تعریف زیر داریم:
کد:
struct student
{
  char name[ 100 ];
  float average;
  int age;
};

با داشتن چنین ساختاری دستورات زیر معتبر هستند:
کد:
student st, *p;
p = &st;
(*p).age = 14;

در خط اول متغیر st از نوع ساختمان student و اشاره گر p به این نوع ساختمان تعریف شده است. در خط بعدی آدرس متغیر st در اشاره گر p قرار گرفته و در خط آخر محتوی فیلد age مربوط به محلی که p به آن اشاره دارد (در اینجا st) برابر 14 می شود.

در زبان برنامه نویسی ++C روش دیگری نیز برای دسترسی به فیلدهای یک ساختمان از طریق اشاره گر وجود دارد. دو عبارت زیر معادل هم هستند:

کد:
(*p).age = 14;
p->age = 14;
استفاده از عملگر <- خوانایی برنامه را بیشتر می کند.

اشاره گر به اشاره گر:

اشاره گر متغیری است که محتوی آن آدرس خانه ای از حافظه است. پس خود این اشاره گر هم در خانه ای از حافظه قرار دارد. اشاره گر به اشاره گر متغیری است که آدرس خانه حافظه ای را در خود نگه می دارد که محتوای آن خود آدرس یکی از خانه های حافظه است. به عبارت دیگر محتوی اشاره گر معمولی، آدرس خانه حافظه متغیرهایی از نوع متغیرهای استاندارد غیر اشاره گر زبان برنامه نویسی ++C، و ساختمانها و کلاسها و توابع است. اما اشاره گر به اشاره گر آدرس خانه حافظه متغیری از نوع اشاره گر معمولی را نگه می دارد.

برای تعریف چنین اشاره گری از ** استفاده می کنیم:

کد:
int a;
int *p1 = &a;
int **p2 = &p1;

اشاره گر به اشاره گر کاربرهای مهمی مانند تعریف آرایه های پویای دو بعدی دارد.

عملیات ریاضی روی اشاره گرها:
محتوی یک اشاره گر آدرس خانه حافظه است که عدد صحیحی می باشد. روی این عدد صحیح می توان دو عمل جمع و تفریق را انجام داد. اما این عملیات محدودیتها و نکاتی رو شامل می شود. آدرس خانه حافظه را می توان به شماره پلاک منازل تشبیه کرد. ما هیچ دو شماره پلاک را با هم جمع یا از هم کم نمی کنیم! در مورد اشاره گرها هم اینگونه است و نمی توان دو اشاره گر را جمع و یا یکی را از دیگری کم کرد. اما می توان عدد صحیحی را به آن اضافه نمود یا از آن کم کرد:

کد:
long int a = 100, *b, *c;
b = &a;
c = b + 1;
c++;
فرض کنیم متغیر a از خانه شماره 1000 شروع شده باشد. پس مقدار b با توچه به دستورات فوق 1000 خواهد بود. در خط بعدی b را با عدد یک جمع زده و در c قرار می دهیم. اما مقدار اشاره گر c بر خلاف حالت عادی 1001 نخواهد شد. متغیر c یک اشاره گر به عدد صحیح بزرگ است. زمانی که آن را با عدد یک جمع می زنیم، این اشاره گر به اندازه فضای مصرفی عدد صحیح بزرگ (در حالت استاندارد چهار بایت) پیش رفته و به خانه 1004 اشاره خواهد کرد. به همین ترتیب اگر از b یک واحد کم می کردیم به جای 999 به خانه شماره 996 اشاره می کرد. دلیل این مساله هم مشخص است. این چهار بایت در کنار هم معنی عدد صحیح بزرگ را دارند و حرکت در داخل بایتهای آن معنی ندارد. اگر اشاره گر به نوع دیگری تعریف شده بود، دقیقا به میزان فضای مصرفی همان نوع حرکت به جلو یا عقب صورت می گرفت. در خط آخر قطعه کد بالا هم باز یک پیش روی به جلو صورت گرفته و مقدار 1008 در خود اشاره گر c قرار می گیرد.


به نقل از :
labod.ir

موفق باشيدHeart

Biggrin Use Google instead of asking stupid questions Biggrin

[/url]
CMC Automation System


آموزش زبان c++
[url=http://www.iranled.com/forum/thread-13923.html]

۱۰-اسفند-۱۳۸۸, ۱۷:۰۸:۴۱
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : اشک, t3r!p3000, ali_asrami, alvandian110, salman_looloo, CONTOROLER
t3r!p3000 آفلاین
         
*****

ارسال‌ها: 5,050
موضوع‌ها: 83
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #27
RE: آموزش مبتدي تا پيشرفته زبان C++ - C
سلام

پست های بیربط به درخواست کاربران پاک شد !

دریم جان قرار است بزودی ادامه آموزش هاشو بذاره !!!!
۲۳-تير-۱۳۸۹, ۰۲:۱۵:۱۵
ارسال‌ها
پاسخ
تشکر شده توسط : dreamvbfox, alvandian110
balal آفلاین
تازه وارد

ارسال‌ها: 1
موضوع‌ها: 0
تاریخ عضویت: آذر ۱۳۸۹

تشکرها : 0
( 1 تشکر در 1 ارسال )
ارسال: #28
RE: آموزش مبتدي تا پيشرفته زبان C++ - C
با سلام
میشه در مورد توابع گرافیکی و کار کردن با اونها هم مطالبی ذکر کنین ؟
ممنون
۳۰-آذر-۱۳۸۹, ۱۵:۱۰:۲۸
ارسال‌ها
پاسخ
تشکر شده توسط : alvandian110
FMMF آفلاین
تازه وارد

ارسال‌ها: 1
موضوع‌ها: 0
تاریخ عضویت: فروردین ۱۳۹۰

تشکرها : 0
( 1 تشکر در 1 ارسال )
ارسال: #29
RE: آموزش مبتدي تا پيشرفته زبان C++ - C
سلام
دوست عزیز واقعا از کاریی که داری می کنی واقعا ممنونم
و جای تشکر داره
اگه امکان داره برات تمام آموزشی گذشته رو با اموزشی های اینده رو pdf بذار که مشکلی پیش نیاد
با تشکر
یا علی
۲۷-اردیبهشت-۱۳۹۰, ۲۲:۴۷:۳۷
ارسال‌ها
پاسخ
تشکر شده توسط : alvandian110
abbas-habibi آفلاین
تازه وارد

ارسال‌ها: 2
موضوع‌ها: 0
تاریخ عضویت: خرداد ۱۳۹۰

تشکرها : 0
( 1 تشکر در 1 ارسال )
ارسال: #30
RE: آموزش مبتدي تا پيشرفته زبان C++ - C
سلام کسی میتونه برای من آموزش سی و سی پلاس پلاس رو در یک فایل پی دی اف به زبان ساده آموزش بده؟؟؟؟
هرکی بتونه عالی میشه و ممنونش میشم
۱۲-خرداد-۱۳۹۰, ۲۲:۵۷:۳۰
ارسال‌ها
پاسخ
تشکر شده توسط : alvandian110
TechSuperior آفلاین
تازه وارد

ارسال‌ها: 1
موضوع‌ها: 0
تاریخ عضویت: دى ۱۳۹۰

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #31
RE: آموزش مبتدي تا پيشرفته زبان C++ - C
از اینکه میبینم همه شما به یادگیری زبان سی پلاس پلاس علاقه دارید خیلی خوشحالم...
مطالبی که در اینجا خوندم در حد آشنایی اولیه با زبان سی هستش
من میخوام توانایی شما رو در زبان سی بسنجم برای همین یک تمرین برای شما آماده کردم:
تمرین: الگوریتمی بنویسید که خروجی زیر را چاپ کند
*
***
****
راهنمایی:باید از حلقه های تو در تو استفاده کنید
اگر کسی مشکلی در این ضمینه داره میتونه از طریق یاهو با من تماس بگیره...
آی دی من: How_is_hack
(آخرین ویرایش در این ارسال: ۰۶-دى-۱۳۹۰, ۱۷:۲۲:۵۲، توسط TechSuperior.)
۰۶-دى-۱۳۹۰, ۱۷:۱۴:۱۰
ارسال‌ها
پاسخ
zupiroos آفلاین
تازه وارد

ارسال‌ها: 1
موضوع‌ها: 0
تاریخ عضویت: آبان ۱۳۹۰

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #32
RE: آموزش مبتدي تا پيشرفته زبان C++ - C
salam , man mikhastam daftarche telefon bevisam vali ye moshkeli dare
man az araye ba tool pooya estefade kardam va ye counter ke har doshoon sarasari hastan
vaghti mikham baraye dovomin bar moshakhasat ro az karbar begiram va tooye araye berizam be counter yek dafee yek meghdari ke nemidoonam az koja miad ezafe mishe va baraye karbare sevom dorost mishe vali az hamoon meghdari ke dade shode va man nemidoonam az koja miad ezafe mishe .
man too peyvast barnamam ro mizaram lotfan bebinid va komakam konid man 23 bahman tahvile poroje daram .


فایل‌(های) پیوست شده
.rar   Phone book.rar (اندازه: 1.54 KB / تعداد دفعات دریافت: 38)
۱۴-بهمن-۱۳۹۰, ۱۱:۴۰:۰۱
ارسال‌ها
پاسخ
gheflat آفلاین
تازه وارد

ارسال‌ها: 1
موضوع‌ها: 0
تاریخ عضویت: فروردین ۱۳۹۱

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #33
RE: آموزش زبان سی | C Learning
سلام !!!من برنامه ای رو میخوام که یک آرایه 20 تایی رو بدون استفاده از دستور آرایه و با استفاده از اشاره گر ها ایجاد کنه و 20 تا ارایه توش بریزه و سپس توسط Bubble sortارایه ها رو مرتب کنه!!!ممنون
۱۰-فروردین-۱۳۹۱, ۱۷:۵۱:۲۵
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  [پروژه] الگوریتم زمانبندی RR به زبان C همراه سورس کد Ghoghnus 2 1,482 ۰۳-بهمن-۱۳۹۸, ۱۴:۲۷:۵۷
آخرین ارسال: Ghoghnus
Question درخواست برنامه ای به زبان ++C saeidengman 11 15,555 ۰۵-تير-۱۳۹۶, ۱۱:۴۷:۰۱
آخرین ارسال: alivolley
  ارتباط دو زبان c و ++C و ایجاد آبجکت از کلاس در C salehjg 3 3,742 ۲۴-اردیبهشت-۱۳۹۵, ۱۶:۰۸:۱۷
آخرین ارسال: salehjg
  کتاب فارسی اموزش زبان C lord_viper 12 33,520 ۱۹-اسفند-۱۳۹۳, ۰۰:۰۲:۰۵
آخرین ارسال: vigraz
Question [سوال] تبدیل نوع متغیر (float به unsigned char) در زبان سی PRO 3 7,754 ۰۹-مرداد-۱۳۹۲, ۲۰:۱۶:۰۰
آخرین ارسال: PRO
  برنامه شمارنده خاص به زبان ++C saidal 1 4,331 ۱۷-اسفند-۱۳۹۱, ۱۷:۲۰:۳۸
آخرین ارسال: Ghoghnus
Wink برنامه هافمن به زبان c++ setayesh20 3 11,299 ۳۱-مرداد-۱۳۹۱, ۲۱:۰۶:۲۹
آخرین ارسال: masterhe3ar
  برنامه به زبان سی MicrowaveCO 1 4,113 ۳۱-مرداد-۱۳۹۰, ۰۰:۰۷:۱۶
آخرین ارسال: norozi
Exclamation [سوال] جستجوی دودویی با استفاده از اشارگرها در زبان C mitra.kh 1 4,178 ۲۴-فروردین-۱۳۹۰, ۱۴:۳۶:۴۰
آخرین ارسال: mitra.kh
  کتاب آموزش برنامه نویس به زبان ++C ali_1500max 1 5,816 ۲۰-فروردین-۱۳۹۰, ۲۱:۱۶:۰۵
آخرین ارسال: kasra.razi

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 11 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS