PDA

View Full Version : اشاره گرها در C (مبتدی/ساده)



Coder#
جمعه 07 شهریور 1393, 13:39 عصر
سلام.
وظیفه اشاره گرها اشاره به مقدار مربوطه در متغیر مربوطه است. اشاره گرها حاوی محتویات داخل متغیرها می باشند.
برنامه ای ساده جهت نمایش برخی از رفتارهای اشاره گرها برای برخی از کاربرانی که در این خصوص مشکل دارن نیز آماده کردم.
ممکنه آموزشی برای زبان برنامه نویسی C برای برخی از افراد در روزهای آتی فراهم کنم.
کسانی که مشکلی در فهم برخی از خطها دارن، حتما بیان کنن.
توضیحات در کنار اکثر خطها داده شدن (مطمئنا انگلیسی بلد هستین)، اما در مورد این دستور/تعریف باید بگم: (p7+*p4)* یعنی p7 داره به p4*مین (پی چهارمین) عنصر در متغیر آرایه ای z اشاره می کنه.
بعدا مثال هایی از توابعی که دارای آرگومان (های) اشاره گر هستن می زنم.
من قراره چند روزی به مسافرت برم. اگر سوالی در خصوص برنامه زیر پرسیده شد و اگر من نبودم، کاربران دیگر پاسخ سوال(ها) رو بدن.
ممنون.



#include <stdio.h>
int main ()
{
int x = 16, y = 2, z[6], temp, i, v;
int *p1, *p2, *p3, *p4, *p5[32], *p6[32], *p7;

p1 = &x; /* p1 now point to x. */
p2 = &y; /* p2 now point to y. */
*p1 -= *p2; /* x is now 14. */

z[0] = x; /* z[0] is now 14. */

z[1] = *p2 * ++*p1; /* x is now 15. z[1] is now 30. */

z[2] = y = --*p1 + y; /* x is now 14. y and z[2] are now 16. */

z[3] = (*p2)++; /* z[3] is now 16. y is now 17. */

z[4] = *p2; /* z[4] is now 17. */

z[5] = *(p3 = p1); /* p3 point to what p1 pointed to. z[5] is now 14 (The initialization is equal to: z[5] = *p3;). */

temp = *p1; /* temp contain the value of x */
*p1 = *p2; /* x contain the value of y */
*p2 = temp; /* y contain the value of temp */

printf("x = %i\ny = %i\n", x, y);
printf("z[0] = %i\nz[1] = %i\nz[2] = %i\n", z[0], z[1], z[2]);
printf("z[3] = %i\nz[4] = %i\nz[5] = %i\n\n", z[3], z[4], z[5]);

for (v = 0, i = *p1 + *p2, p7 = &z[0], p4 = &v; v <= i; (*p4)++)
{
p6[*p4] = p5[*p4] = &*p4; /* p5[*p4] point to what *p4 pointed to. p6[*p4] point to p5[*p4]. */
if (*p4 <= 9)
printf("*p4 = %i *p5 = %i *p6 = %i *p7 = %i\n", *p4, *p5[*p4], *p6[*p4], (v <= 5) ? *(p7+*p4) : (*p7 = !*p4));
else
printf("*p4 = %i *p5 = %i *p6 = %i *p7 = %i\n", *p4, *p5[*p4], *p6[*p4], (v <= 5) ? *(p7+*p4) : (*p7 = !*p4));
}

return 0;
}

Coder#
جمعه 07 شهریور 1393, 14:32 عصر
اشتباهی در توضیح (comment) کنار خط 21 رخ داده بود که رفع شد.
[4]z بود که به [5]z تغییر پیدا کرد.

rahimlotfi
پنج شنبه 13 شهریور 1393, 08:21 صبح
سلام
داخل این وبلاگ یک سری فیلم آموزشی سی پلاس هست که اشاره گر ها گفتیم و این مباحث درخت و لیست .... رو هم پوشش دادیم ببینید بد نیست
www.pfr.blogfa.com