اشاره گرهای ریاضی در زبان C
اشاره گر در زبان C یک آدرس می باشد که این آدرس به صورت عددی است. بنابراین می توان عملیات ریاضی را بر روی آن انجام داد. چهار عملگر ریاضی در زبان C وجود دارند که در هنگام استفاده از اشاره گرها می توانید از آن ها استفاده کنید ( ++، –، + و -).
برای درک بهتر موضوع اشاره گر ptr را در نظر بگیرید و فرض کنید که به آدرس 1000 در حافظه اشاره می کند. در زبان برنامه نویسی C می توانیم عملیات زیر را بر روی اشاره گر prt اعمال کنیم:
1 | ptr++ |
زمانی که عملیات بالا انجام شود، اشاره گر ptr ما به آدرس 1004 اشاره می کند به این دلیل که از نوع integer می باشد و هر integer در حافظه 4 بایت اشغال می کند. حال اگر این اشاره گر از نوع کاراکتر (char) بود، یک واحد به آدرس اضافه می شد (یعنی 1001) زیرا نوع داده کار 1 بایت از حافظه را اشغال می کند.
افزایش اشاره گر
ما در برنامه های خود ترجیح می دهیم از اشاره گر به جای آرایه استفاده کنیم زیرا اشاره قابل تغییر و افزایش است اما آرایه به دلیل آن که یک اشاره گر ثابت است نمی تواند تغییر کند. برنامه زیر با افزایش مقدار اشاره گر به عنصر بعدی آرایه دسترسی پیدا می کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <stdio.h> const int MAX = 3; int main () { int var[] = {10, 100, 200}; int i, *ptr; /* let us have array address in pointer */ ptr = var; for ( i = 0; i < MAX; i++) { printf("Address of var[%d] = %x\n", i, ptr ); printf("Value of var[%d] = %d\n", i, *ptr ); /* move to the next location */ ptr++; } return 0; } |
زمانی که کد بالا توسط کامپایلر C و اجرا شود، نتیجه زیر را تولید خواهد کرد:
1 2 3 4 5 6 | Address of var[0] = bf882b30 Value of var[0] = 10 Address of var[1] = bf882b34 Value of var[1] = 100 Address of var[2] = bf882b38 Value of var[2] = 200 |
کاهش اشاره گر
روشی که برای افزایش اشاره گر استفاده می شود را می توان برای کاهش آن نیز استفاده کرد با این تفاوت که باید از عملگر کاهشی استفاده شود:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <stdio.h> const int MAX = 3; int main () int var[] = {10, 100, 200}; int i, *ptr; /* let us have array address in pointer */ ptr = &var[MAX-1]; for ( i = MAX; i > 0; i--) { printf("Address of var[%d] = %x\n", i-1, ptr ); printf("Value of var[%d] = %d\n", i-1, *ptr ); /* move to the previous location */ ptr--; } return 0; } |
زمانی که کد بالا کامپایل و اجرا شود نتیجه زیر را تولید می کند:
1 2 3 4 5 6 | Address of var[2] = bfedbcd8 Value of var[2] = 200 Address of var[1] = bfedbcd4 Value of var[1] = 100 Address of var[0] = bfedbcd0 Value of var[0] = 10 |
مقایسه اشاره گرها
اشاره گرها را می توان با استفاده از عملگر ==، < و > با یک دیگر مقایسه کرد. اگر p1 و p2 به متغیرهای مرتبط اشاره کنند، بنابراین می توان آن دو را با هم مقایسه کرد. به مثال زیر که تغییر یافته مثال بالاست توجه کنید، آدرس اشاره گر هر بار که حلقه اجرا می شود یک واحد افزایش می یابد و تا زمانی که آدرس قرار گرفته در اشاره گر با آدرس آخرین عنصر آرایه برابر نباشد، اجرای حلقه ادامه پیدا می کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h> const int MAX = 3; int main () { int var[] = {10, 100, 200}; int i, *ptr; /* let us have address of the first element in pointer */ ptr = var; i = 0; while ( ptr <= &var[MAX - 1] ) { printf("Address of var[%d] = %x\n", i, ptr ); printf("Value of var[%d] = %d\n", i, *ptr ); /* point to the previous location */ ptr++; i++; } return 0; } |
زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیرا تولید خواهد کرد:
1 2 3 4 5 6 | Address of var[0] = bfdbcb20 Value of var[0] = 10 Address of var[1] = bfdbcb24 Value of var[1] = 100 Address of var[2] = bfdbcb28 Value of var[2] = 200 |
هیچ نظری ثبت نشده است