درخواست توضیح دادن یک کد ساده (تابع بازگشتی) c
من یک کد یه زبان سی دارم که نمیتونم اون رو درک کنم. چون تازه شروع کردم به برنامه نویسی تحت سیستم یکم برام سخته...
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[50];
printf("Enter a line of text:\n");
fgets(str, 50, stdin);
printf("\nEntered text is:\n%s\n",str);
printf("Length of entered text: %d\n",strlen(str)-1);
printf("\nReversed text:\n");
ReverseString(str);
printf("\n");
return 0;
}
void ReverseString(const char *s)
{
if(s[0] == '\0')
{
return;
}
else
{
ReverseString(&s[1]);
if(s[0]!='\n') putchar(s[0]);
}
}
توی این کد یک کلمه یا جمله رو میخونه و برعکس میکنه.
اما بخش void ReverseString(const char *s) رو درک نمیکنم. چطوری متن رو بر میگردونه؟؟؟
لطفا خط ۲۲ به بعد رو یکم توضیح بدید
4 پاسخ
در ادامه پست مهندس عادلی عزیز : خط 22 ای که فرموید مربوط میشه به بحث اشاره گر ها که در سی پلاس پلاس هم بود ولی در سی شارپ به خاطر بهینه نبودن مدیریت مموری ادامه دار نشد . اشاره گر میتواند در متغیری ذخیره شود، ولی با وجود اینکه اشاره گر یک آدرس حافظه است و آدرس حافظه نیز یک عدد است، ولی نمیتوان آن را در متغیرهایی از نوع int, double و یا غیره ذخیره کرد. متغیری که اشاره گر را ذخیره میکند باید از نوع اشاره گر باشد. این متغیرها را متغیرهای اشاره گر گویند. برای تعریف متغیرهای اشاره گر در C بصورت زیر عمل میشود:
; متغیر* نوع
برای تعریف متغیر اشاره گری که بخواهد آدرس متغیرهایی را نگهداری کند باید نوع متغیر اشاره گر را همنوع با آن متغیر در نظر گرفت و کنار متغیر اشاره گر، علامت * را قرار داد.
بعنوان مثال دستور int *p; را میتوان بصورتهای زیر تفسیر کرد:
P اشاره گری از نوع int است.
P آدرس محل هایی از حافظه را نگهداری میکند که محتویات انها مقادیری از نوع صحیح اند.
P میتواند به محلهایی اشاره کند که محتویات آنها مقادیری از نوع صحیح میباشند.
عملگرهای اشاره گرهای زبان C
دو عملگر & و ** در انجام عملیات با اشاره گرها مورد استفاده قرار میگیرند. هر یک از این دو عملگر ، یک عملوند دارند. عملگر& آدرس عملوند خودش را مشخص میکند (خط 30 در کد شما ) و عملگر * محتویات جایی را مشخص مینماید که عملوندش به آن اشاره میکند.
با تشکر از نکته مهم مهندس خانلری
عمل اصلی که این تابع را به تابع بازگشتی می کند در خط 30 می باشد که تابع خودش را با مقدار جدیدی صدا میزند یعنی یک کاراکتر که همان کاراکتر خانه 0 است را به کار نمی برد.
سلام Itpro ای عزیز. به این نوع برنامه نویسی برنامه نویسی بازگشتی گویند. توی این برنامه نویسی یک تابع خود را چند بار فراخوانی می کند. در این تابع نیز این اتفاق افتاده است. شما فرض کنید که مقدار ورودی این تابع یک رشته مثل Itpro باشد. حال نحوه اجرای برنامه به شکل زیر خواهد بود
ReverseString("Itpro");
ReverseString("tpro");
ReverseString("pro");
ReverseString("ro");
ReverseString("o");
وقتی که رشته خالی باشد خط بعد از فراخوانی تابع اجرا شده و سپس همان مسیری که برنامه رفته بود باز میگردد و خطوط بعد از فراخوانی صدا زده می شود و مقادیر از آخر به اول چاپ خواهند شد.
برای کمک بیشتر به مقاله استفاده از توابع در برنامه نویسی در همین وبسایت مراجعه کنید
اشاره گر ها در چه زبان هایی کاربرد داره؟؟؟