PDA

View Full Version : سوال در مورد نحوه ی ایجاد پوینترها و ثابت ها



dennis ritchie
شنبه 22 آبان 1395, 17:42 عصر
سلام دوستان
در زبان سی ، تفاوت عبارت های زیر توی چیه ؟
(http://paste.ubuntu.com/23465747/)

int x; x = 1;

int * const x1 = &x;
int *const x2 = &x;
int const *x3 = &x;
int const * x4 = &x;

const * int x7 = &x; //Error
const *int x8 = &x; //Error
const int *x9 = &x;
const int * x10 = &x;

const int const *x13 = &x;
const int const * x14 = &x;
const int *const x15 = &x;
const int * const x16 = &x;
const *int const x17 = &x; //Error



شبیه به هم هستند ولی متوجه تفاوتشون نمیشم
سوال دیگه ای هم دارم ، بعضی از قسمت ها اررور کامپایل میدن که توی کامنت مشخص شدن، چرا اررور میدن ؟
پیشاپیش ممنون

C3phalex1n_0x
دوشنبه 24 آبان 1395, 10:06 صبح
سلام. هنگامیکه یک اشاره گر را با عبارت const تعریف می کنید، یعنی آنکه آن اشاره گر مقادیرش غیرقابل تغییر است.

به عنوان مثال، اگر عبارت const قبل از علامت ستاره آورده شود، این بدین معنا است که اشاره گر به جایی دارد، اشاره می کند که مقدار آن غیرقابل تغییر است.
اگر عبارت const بعد از ستاره بیاید این بدین معنا است که آدرس آن، بعد از مقداردهی اولیه غیر قابل تغییر است و دیگر شما نمی توانید آن را تغییر بدهید.
اگر عبارت const قبل و بعد از ستاره آورده شود این بدین معنی است که اشاره گر آدرسی که به آن اشاره می کند و همچنین مکانی که به آن اشاره می کند ثابت و غیرقابل تغییر است.

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

/*
C Secure Programming Course
Instructor : Milad Kahsari Alhadi
Class : 010
*/

#include <stdio.h>
void main()
{
int a = 20;
int const *ptr = &a;
*ptr = 200;

printf("Address of A : %p - Value of A : %d\n", ptr, a);
}