| | #11 (permalink) | |||||||||
| Y A S H A R on Next Level ![]() ![]() ![]() ![]() تاريخ عضويت: Nov 2008 شهر: dark city
پست ها: 9,510
درجه: 63 [ ![]() ![]() ![]() ![]() ]سابقه: 2360 / 2360 سپاس ها: 2,036
از این کاربر 2,639 بار در 1,308 پست تشکر شده
| 3.4 توضیح سریع تابع ()printf شما احتمالا متوجه عبارت دو حرفی n\ در مواقعی که از تابع ()printf استفاده می کنیم شدهاید. این عبارت در خروجی چاپ نمیشود بلکه ()printf را متوجه می کند که باید به سطر بعد برود. به طور کلی اسلاش وارونه (\) کاراکتر گریز (escape character) زبان سی محسوب می شود و هرگاه در داخل 2 کوتیشن مارک قرار گیرد کاراکتر بعد از آن معنای مخصوصی را خواهد داد.نمونه دیگر t\ است که به اندازه یک tab فاصله خالی در خروجی ایجاد می کند. کاراکتر مخصوص دیگری که ()printf آنرا مراعات می کند درصد (%) است که از ()printf میخواهد کاراکترهای بعد از خود را در هنگام چاپ با مقدار یک متغییر مشخص جایگزین نماید. d% رشته کاراکتری است که یک متغییر از نوع دادهای Int را برای چاپ با استفاده از سیستم شمارش بر مبنای ده یا دهدهی نمایندگی می کند. به ازای هر d% در رشته قالب بندی شما باید به تابع ()printf بفهمانید که چه متغییری را قصد جایگزین کردن با آن دارید. در نمونه زیر برخی استفادههای بیشتر تابع ()printf را مشاهده میکنید: نمونه 3.4 more_printf.c کد:
Int
main()
{
int one = 1;
int two = 2;
int three = 4; /* the values are unimportant here */
printf( "one ==\t%d\ntwo ==\t%d\nthree ==\t%d\n", one, two, three );
return 0;
}
در ابتدای این فصل اشاره کردیم که یک برنامه معمولا با انجام عملیات بر روی دادهها سر و کار دارد. با به کار گیری علایم استاندارد ریاضی انجام عملیات ریاضی در زبان c به صورت بسیار آسان قابل فهم و خواندن است. به نمونه زیر توجه کنید: نمونه 3.5 wages.c کد:
int
main()
{
int hours_per_day;
int days_per_week;
hours_per_day = 8;
days_per_week = 5;
printf("I work %d hours a week.\n", (days_per_week * hours_per_day) );
printf("%d %d hour days\n", days_per_week, hours_per_day);
return 0;
}
متغییرهایی که تا به حال از آنها استفاده کردیم متغییرهای محلی (local variables) بودند این متغییرها در همان تابعی که قصد استفاده از آنها را داریم تعریف شده پس از اجرای تابع نابود می شوند و همانطور که گفتیم تا قبل از انتساب مقدار آنها غیر قابل پیش بینی است. دسته دیگری از متغییرها که متغییرهای عمومی (global variables) نام دارند در خارج از توابع و معمولا بالای تابع ()main تعریف می شوند. این متغییرها از داخل تمام توابعی بعد از اعلان آنها تعریف شوند قابل استفاده بوده در ابتدای اجرای برنامهایجاد و تا پایان اجرای برنامه در حافظه باقی می مانند. بر خلاف متغییرهای محلی به محض اعلان این متغییرها مقدار اولیه صفر به آنها تعلق می گیرد. نمونه 3.6 global_variable.c کد:
#include
int global_varialble;
int first_function(void);
int
main()
{
printf("The first value of global_varialbles is %d \n",global_varialble);
first_function();
return 0;
}
int
first_function()
{
global_varialble = 5;
printf("Now the value of global_varialble is %d \n",global_varialble);
return 0;
}
منظور از حوضه (scope) یک متغییر محدودهایست که متغییر در آن قابل دسترسی و استفاده می باشد. به عنوان نمونه همانطور که در بالا دیدیم حوضه متغییرهای محلی همان تابعی بود که در آن تعریف شده بودند و حوضه متغییرهای عمومی تمام توابعی بود که بعد از اعلان آن متغییرها تعریف می شدند. 3.8 کلاسهای حافظه کلاس حافظه خصوصیتی از متغییر است که طول عمر و حوضه متغییر را مشخص می کند.منظور از طول عمر زمان ایجاد و نابود شدن متغییر می باشد. کلاسهای حافظه انواع گوناگونی دارد که در این جا دو مورد از پرکاربرد ترین آنها یعنی کلاس حافظهایستا (static) و کلاس حافظه خارجی (external) را توضیح می دهیم: 3.8.1 کلاس حافظه خارجی بعضی اوقات کدهای برنامه ما در بیش از یک فایل قرار دارد.شما میتوانید از متغییرهای عمومی که در یکی از فایلها اعلان شده است در فایل دیگری استفاده کنید به شرط اینکه آن متغییر را درفایل دوم نیز اعلان نمایید. دستور اعلان متغییر در فایل دوم باید با کلمه کلیدی extern آغاز گردد. در نمونه زیر کدهای برنامه از دو فایل تشکیل شده است: نمونه 3.7 main.c کد: int main()
{
extern int my_var;
my_var = 500;
print_value();
return 0;
}
کد: #include
int my_var;
void print_value()
{
printf("my_var = %d\n", my_var);
}
__________________ . ![]() | |||||||||
| | |
| | |
| | #12 (permalink) | |||||||||
| Y A S H A R on Next Level ![]() ![]() ![]() ![]() تاريخ عضويت: Nov 2008 شهر: dark city
پست ها: 9,510
درجه: 63 [ ![]() ![]() ![]() ![]() ]سابقه: 2360 / 2360 سپاس ها: 2,036
از این کاربر 2,639 بار در 1,308 پست تشکر شده
| 3.8.2 کلاس حافظهایستا در زبان C هرگاه یک تابع را بیش از یک بار فراخوانی کنیم با هر بار فراخوانی تابع متغییرهای محلی تعریف شده در تابع از ابتدا ایجاد شده سپس مقدار اولیه گرفته و در انتهای اجرای تابع نابود می شوند اما اگر این متغییرها از نوع کلاس حافظهایستا باشند تنها یک بار مقدار اولیه گرفته در هنگام خروج از تابع آخرین مقدار خود را حفظ کرده و تا انتهای اجرای برنامه در حافظه باقی می مانند. برای اینکه متغییرهای محلی یک تابع را از نوع ایستا تعریف کنیم باید در دستور اعلان آنها ابتدا کلمه کلیدی static را ذکر نماییم تا آن متغییر از نوع محلی ایستا تعریف شود. اما متغییرهای عمومی به طور پیش فرض از نوع ایستا بوده و ذکر یا عدم ذکر کلمه کلیدی static در ابتدای فرمان اعلان آنها بی تاثیر است. در صورتیکه متغییر محلی از نوع ایستا تعریف نشود کلاس حافظه آن از نوع اتوماتیک (automatic) خواهد بود.کلاس حافظه اتوماتیک با آوردن کلمه کلیدی auto در ابتدای دستور اعلان متغییر مشخص می شود. البته چون متغییرهای محلی در صورتیکه کلاس حافظه دیگری برای آنها بیان نشود به طور پیش فرض از نوع اتوماتیک هستند آوردن و یا نیاوردن کلمه کلیدی autoدر ابتدای دستور اعلان آنها یکسان است. نمونه 3.9 static_variable.c کد: #include
int first_function(void);
int
main()
{
first_function();
first_function();
first_function();
return 0;
}
int
first_function()
{
int x=0;
static int y=0;
printf(“automatic x = %d static y = %d \n”,x,y);
x=x+1;
y=y+1;
return 0;
}
یک عادت خوب برنامه نویس اینست که هیچ گاه عددی غیر از صفر یا یک را در خلال کدهایتان به کار نبرید!. اگر به ثابت عددی دیگری غیر از صفر و یک احتیاج داشتید آنرا تبدیل به یک متغییر از نوع غیرقابل تغییر (constant) نمایید. برای این کار در ابتدای دستور اعلان متغییر از کلمه کلیدی const استفاده نمایید. نمونه : Const int my_age = 20;مقدار این متغییر در تمام طول برنامه 20 باقی خواهد ماند و هر کجا که قصد تغییر آن را داشته باشید با خطای کامپایلر مواجه خواهید شد. عدد 20 معنای مختصری می دهد در حالیکه مشخصهای مانند my_age اطلاعات بیشتری در مورد عملی که تابع انجام می دهد در اختیار ما قرار می دهد. مزیت دیگر استفاده از متغییرهای غیر قابل تغییر در اینست که برای تغییر مقدار ثابت عددی باید در تمام برنامه به دنبال آن ثابت گشته و آن را تغییر دهیم ولی برای تغییر مقدار متغییرهای غیر قابل تغییر تنها فرمان اعلان آنها را تغییر می دهیم. فصل چهار : کنترل جریان زبان برنامه نویسی c دو سبک برای تصمیم گیری فراهم نموده است : حلقهها (looping) انشعابها(Branching). انشعاب یعنی تصمیم گیری در مورد اینکه چه عملیاتی انجام شود و حلقه یعنی اینکه یک عملیات خاص چند مرتبه تکرار شود. 4.1 انشعاب وجه تسمیه انشعاب بهاین دلیل است که برنامه در مواجه با دو انشعاب در کد خود انتخاب می کند که کدام یک را ادامه دهد. دستور if یکی از ساده ترین ساختارهای انشعاب است. این دستور از یک شرط (expression)که داخل پرانتز قرار گرفته و نیز یک دستور(statement) و یا بلوکی از دستورات(block of statements) که توسط دو آکولاد باز و بسته یعنی { و } محاصره شده اند تشکیل شده است.در صورتیکه شرط صحیح باشد ( ارزشی غیر صفر داشته باشد) در آنصورت دستور و یا بلوک دستورات اجرا خواهند شد و در غیر این صورت دستورات نادیده گرفته خواهند شد. دستور if دارای یکی از دو شکل کلی زیر است: فرم کلی اول با یک دستور کد: if (expression) statement; کد: if (expression)
{
statement1;
statement2;
statement3;
}
کد: #include
int
main()
{
int cows = 6;
if (cows > 1)
printf("We have cows\n");
if (cows > 10)
printf("loads of them!\n");
return 0;
}
کامپایل – اجرا و خروجی برنامه بالا به صورت زیر است: کد: ciaran@pooh:~/$ gcc -Wall -Werror -o cows using_if.c ciaran@pooh:~/$ ./cows We have cows ciaran@pooh:~/$ دستور ()printf دوم در کد بالا به دلیل اشتباه بودن شرط آن ( با ارزش صفر) اجرا نمی گردد. 4.2if…else شکل دومی از دستور if نیز وجود دارد که به شما امکان می دهد تا بلوکی از کدها را مشخص نموده تا در صورت اشتباه بودن شرط اجرا شوند. این ساختار با نام دستور if ... else شهرت دارد و به وسیله قرار دادن کلمه کلیدی reserved word)) else و یک بلوک کد دیگر در انتهای ساختار معمولی if شکل می گیرد. پس ار تست شرط دستر if یکی از دو بلوک کد بسته به صحیح یا غیر صحیح بودن شرط اجرا خواهند شد. به نمونه زیر توجه کنید: نمونه 4.2 cows2.c کد: int
main()
{
int cows = 0;
if (cows > 1)
{
printf("We have cows\n");
printf("%d cows to be precise\n", cows);
}
else
{
if (cows == 0)
printf("We have no cows at all\n");
else
printf("We have only one cow\n");
}
if (cows > 10)
printf("Maybe too many cows.\n");
return 0;
}
خروجی برنامه کد: ciaran@pooh:~/$ ./cows2 We have no cows at all ciaran@pooh:~/$ این ساختار انشعاب نسبت ساختارهای قبلی قدری پیچیده تر است. اگر چه دستور switch بسیار انعطافپذیر است اما تنها برای تست کردن دادههای صحیح و کاراکتری کاربرد دارد. فرم کلی آن به صورت زیر است: فرم کلی ساختار switch کد: switch (integer or character expression)
{
case constant1 : statement1;
break;
case constant2 : statement2;
break;
case constant3 : statement3;
break;
}
نمونه 4.3 morse.c کد: #include
int main ();
void morse (int);
int main ()
{
int digit;
printf ("Enter any digit in the range 0 to 9: ");
scanf ("%d", &digit);
if ((digit < 0) || (digit > 9))
{
printf ("Your number was not in the range 0 to 9.\n");
}
else
{
printf ("The Morse code of that digit is ");
morse (digit);
}
return 0;
}
void morse (int digit) /* print out Morse code */
{
switch (digit)
{
case 0 : printf ("-----");
break;
case 1 : printf (".----");
break;
case 2 : printf ("..---");
break;
case 3 : printf ("...--");
break;
case 4 : printf ("....-");
break;
case 5 : printf (".....");
break;
case 6 : printf ("-....");
break;
case 7 : printf ("--...");
break;
case 8 : printf ("---..");
break;
case 9 : printf ("----.");
}
printf ("\n\n");
}
کد: #include
int main ()
{
printf ("Will you join the Free Software movement? ");
if (yes())
{
printf("Great! The price of freedom is eternal vigilance!\n\n");
}
else
{
printf("Too bad. Maybe next life...\n\n");
}
return 0;
}
int yes()
{
switch (getchar())
{
case 'y' :
case 'Y' : return 1;
default : return 0;
}
}
حلقهها راهی را برای تکرار فرمانها و نیز کنترل اینکه فرمانها چند مرتبه انجام شود فراهم میکنند.فرضا شما قصد دارید حروف الفبا را بر روی صفحه نمایش چاپ کنید. می توانید این کار را با یک بار فراخوانی تابع ()printf انجام دهید. این یک راه حل برای انجام این کار است اما به نظر نمی رسد که بهترین راه باشد.حال بر فرض اگر خواسته باشید اعداد یک تا هزار را در یک ستون چاپ کنید چه میکنید؟ آیا باز هم از یک تابع ()printf بسیار طولانی استفاده میکنید و یا هزار بار تابع ()printf را در کدهایتان تایپ میکنید؟!. البته می توانید راه حلهای ذکر شده را به کار برید ولی بهتر است انجام کارهای تکراری را به کامپیوتر سپرده و وقت خود را صرف پرداختن به قسمتهای جذاب تر برنامه خود کنید.
__________________ . ![]() | |||||||||
| | |
| | #13 (permalink) | |||||||||
| Y A S H A R on Next Level ![]() ![]() ![]() ![]() تاريخ عضويت: Nov 2008 شهر: dark city
پست ها: 9,510
درجه: 63 [ ![]() ![]() ![]() ![]() ]سابقه: 2360 / 2360 سپاس ها: 2,036
از این کاربر 2,639 بار در 1,308 پست تشکر شده
| 4.4 حلقه while اساسی ترین حلقه در زبان c حلقه while است.دستور while کاری شبیه تکرار دستور if را انجام می دهد. اگر شرط دستور صحیح باشد دستورات انجام می شوند با این تفاوت که پس از اجرای دستورات شرط مجددا بررسی می شود تا در صورتیکه هنوز صحیح باشد دستورات بار دیگر انجام شوند. و این حلقه تا زمانی تکرار می شود که شرط مقدار غلط پیدا کند. در صورتیکه در همان مرتبه اول بررسی شرط مقدار ناصحیح داشته باشد دستورات به هیچ وجه اجرا نمی گردند. به عبارت دیگر درصورتیکه شرط هرگز مقدار غلط پیدا نکند حلقه به طور بی نهایت تکرار می شود. برای کنترل تعداد دفعاتی که یک حلقه کدهایش را اجرا می کند شما حداقل یک متغییر در جمله شرط دارید که در بلوک کد متعاقب تغییر می یابد. این موضوع به جمله شرط امکان می دهد در برخی مراحل نادرست گردد. نمونهی را که پیش رو دارید یک بازی ساده حدس زدن عدد است: نمونه 4.5 guess_my_number.c کد: #include
int
main()
{
const int MAGIC_NUMBER = 6;
int guessed_number;
printf("Try to guess what number I'm thinking of\n");
printf("HINT: It's a number between 1 and 10\n");
printf("enter your guess: ");
scanf("%d", &guessed_number);
while (guessed_number != MAGIC_NUMBER);
{
printf("enter your guess: ");
scanf("%d", &guessed_number);
}
printf("you win.\n")
return 0;
}
معمولا در مواردیکه تعداد دفعات تکرار حلقه از قبل معیین است از حلقه for استفاده می کنیم. در ساختار حلقه for متغییری وجود دارد که تعداد دفعات تکرار حلقه را تعیین می کند و اصطلاحا شمارنده نامیده می شود. در پرانتز بعد از کلمه for سه عبارت وجود دارند که توسط سمی کالون (;) از یکدیگر جدا شده اند. اولین عبارت مقدار اولیه متغییر شمارنده را مشخص می کند. آخرین عبارت معیین می کند که با هر بار اجرای دستورات حلقه مقدار متغییر شمارنده به چه میزان اضافه یا کم می شود و بالاخره عبارت وسط که شرط حلقه است مشخص می کند حلقه تا چه زمانی باید اجرا شود. فرم کلی حلقه if به صورت زیر است: کد: for (initialization; expression; action )
{
statement1;
statement2;
statement3;
}
نمونه 4.6 for_ten.c کد: #include
int
main()
{
int i;
/* display the numbers from 0 to 9 */
for (i = 0; i < 10; i++)
printf("%d\n", i);
return 0;
}
حلقه do … while شبیه حلقه while عمل می کند با این تفاوت که شرط حلقه به جای ابتدا در انتهای حلقه بررسی می شود. پس حتی اگر شرط حلقه مقدار نادرست داشته باشد دستورات حلقه حداقل یک بار اجرا می شوند. در ذیل نمونهی از کاربرد این حلقه آمده است: نمونه 4.7 guess_my_number.c کد: #include
int
main()
{
const int MAGIC_NUMBER = 6;
int guessed_number;
printf("Try to guess what number I'm thinking of\n");
printf("HINT: It's a number between 1 and 10\n");
do
{
printf("enter your guess: ");
scanf("%d", &guessed_number);
}
while (guessed_number != MAGIC_NUMBER);
printf("you win.\n")
return 0;
}
عملگر ?: شبیه دستور if … else عمل می کند با این تفاوت که چون یک عملگر است ( و نه یک دستور )در میان عبارتها نیز کار برد دارد. نمونه 4.8 apples.c کد: #include
int
main()
{
apples = 6;
printf("I have %d apple%s ", apples, (apples == 1) ? "" : "s");
return 0;
}
زبان c راه بسیار سادهای برای خارج شدن از حلقههای تکرار در مواقع لزوم فراهم میکند. برای این کار باید از دستور break که پیش از این به منظور بیرون جهیدن از ساختار switch از آن بهره برده بودیم استفاده کرد. نمونه زیر اعداد یک تا 12 را چاپ می کند: نمونه 4.10 continue.c نمونه 4.9 break.c #include int main() { for (i = 1; i <= 20; i++) { if (i == 12) { break; } printf ( “%d “ ,i); } return 0; } به کار بردن دستور continue در یک حلقه تکرار باعث می شود تا دستورات بعدی نادیده گرفته شده و مفسر به ابتدای حلقه باز گردد. نمونه زیر حاصل تقسیم عدد بیست را بر اعداد محدوده منفی ده تا مثبت ده چاپ می کند اما برای جلوگیری از تقسیم شدن عدد بیست بر عدد صفر از یک شرط و دستور continue استفاده شده است. کد: #include
int
main()
{
for (i = -10; i <= 10; i++)
{
if (i == 0)
{
continue;
}
printf ("%d", 20/i);
}
return 0;
}
5.1 اصول اولیه محدودیتی که ممکن است شما نیز متوجه آن شده باشید این است که توابع تنها از طریق مقادیر بازگشتی خود در برنامه شما تاثیر گذراند. با این وصف اگر بخواهید تا یک تابع با بیش از یک متغییر سر و کار داشته باشد چه خواهید کرد؟ پاسخ استفاده از اشاره گرهاست. یک اشاره گر نوع خاصی از متغییرهاست که برای نگهداری آدرسهای حافظه کاربرد دارد یعنی یک اشاره گر آدرس متغییر دیگری را به عنوان مقدار خود نگهداری میکند. اعلان اشاره گرها به مانند اعلان متغییرهای عادی است با این تفاوت که شما باید یک کاراکتر ستاره “*” را به ابتدای نام اشاره گر اضافه کنید. دو عملگر جدید برای کار با اشاره گرها وجود دارد که شما باید آنها را بشناسید:عملگر & و عملگر * که هر دو جزء عملگرهای یگانی پیشوندی محسوب می شوند . زمانی که شما یک علامت آمپرسند "&" را در آغاز نام یک متغییر اضافه می کنید شما آدرس آن متغییر را دریافت خواهید کرد که می تواند در یک اشاره گر نگهداری شود. اما زمانیکه علامت ستاره را در آغاز نام یک اشاره گر به کار می برید شما مقدار نگهداری شده در آدرس حافظهای را که اشاره گر به آن اشاره می کند دریافت خواهید کرد. مثل همیشه بحث را با یک نمونه دنبال می کنیم : نمونه 5.1 pointers_are_simple.c کد: #include
int
main()
{
int my_variable = 6, other_variable = 10;
int *my_pointer;
printf("the address of my_variable is : %p\n", &my_variable);
printf("the address of other_variable is : %p\n", &other_variable);
my_pointer = &my_variable;
printf("\nafter \"my_pointer = &my_variable\":\n");
printf("\tthe value of my_pointer is %p\n", my_pointer);
printf("\tthe value at that address is %d\n", *my_pointer);
my_pointer = &other_variable;
printf("\nafter \"my_pointer = &other_variable\":\n");
printf("\tthe value of my_pointer is %p\n", my_pointer);
printf("\tthe value at that address is %d\n", *my_pointer);
return 0;
}
خروجی برنامه کد: the address of my_variable is : 0xbffffa18
the address of other_variable is : 0xbffffa14
after "my_pointer = &my_variable":
the value of my_pointer is 0xbffffa18
the value at that address is 6
after "my_pointer = &other_variable":
the value of my_pointer is 0xbffffa14
the value at that address is 10
برنامهها در زمان اجرا ، وقتی به اعلان یک متغییر می رسند از سیستم عامل درخواست تخصیص مقداری حافظه برای آن متغییر را می نمایند. سیتم عامل قطعهای از حافظه را که اندازه آن برای نگهداری مقادیر متغییر مناسب است انتخاب و آدرس آن را به برنامه اعلام میکند. هر زمان که برنامه قصد خواندن دادههایی را که درون آن متغییر نگهداری می شوند داشته باشد ، به آدرس حافظه آن متغییر مراجعه کرده و به برابر با اندازه آن متغییر بایتهای حافظه را می خواند. در صورتی که شما یک بار دیگر برنامهای را که در اغاز این فصل ذکر کردیم اجرا کنید ممکن است نتایج مشابه یا متفاوتی را نسبت به بار اول در مورد آدرسهای حافظه بدست آورید کهاین امر بستگی به شرایط سیستم شما دارد اما حتی اگر در بار دوم نتایج یکسانی را نسبت به یار اول بدست آورید هیچ تضمینی برای اینکه اجرای برنامه در فردا نیز همین نتایج را داشته باشد وجود نخواهد داشت. در واقع این احتمال که فردا نیز برنامه همین نتایج را داشته باشد تقریبا محال است.
__________________ . ![]() | |||||||||
| | |
| | #14 (permalink) | |||||||||
| Y A S H A R on Next Level ![]() ![]() ![]() ![]() تاريخ عضويت: Nov 2008 شهر: dark city
پست ها: 9,510
درجه: 63 [ ![]() ![]() ![]() ![]() ]سابقه: 2360 / 2360 سپاس ها: 2,036
از این کاربر 2,639 بار در 1,308 پست تشکر شده
| 5.3 اشاره گرها در جایگاه آرگومان (نشانوند )های تابع یکی از بهترین مزیتهای اشاره گرها این است که آنها به توابع این امکان را می دهند تا متغییرهایی در خارج از حوزه خود را تغییر دهند. با ارسال یک اشاره گر برای یک تابع ، شما به آن تابع امکان خواندن و نوشتن بر روی دادههای نگهداری شده در متغییر مربوط به آن اشاره گر را می دهید. مثلا شما قصد نوشتن تابعی را دارید که مقادیر دو متغییر را جا به جا میکند. بدون بهره گیری از اشاره گرها نوشتن این برنامه غیر ممکن است. در زیر کدهای برنامه مورد نظر را می بینید: کد: Example 5-2. swap_ints.c
#include
int swap_ints(int *first_number, int *second_number);
int
main()
{
int a = 4, b = 7;
printf("pre-swap values are: a == %d, b == %d\n", a, b)
swap_ints(&a, &b);
printf("post-swap values are: a == %d, b == %d\n", a, b)
return 0;
}
int
swap_ints(int *first_number, int *second_number)
{
int temp;
/* temp = "what is pointed to by" first_number; etc... */
temp = *first_number;
*first_number = *second_number;
*second_number = temp;
return 0;
}
همانطور که مشاهده می کنید اعلان تابع () swap_ints به کامپایلر gcc می گوید که انتظار دو اشاره گر ( آدرس متغییر )را داشته باشد. همچنین عملگر & به منظور ارسال آدرس دو متغییر به جای مقدار آنها به کار رفته است. موفق باشید
__________________ . ![]() | |||||||||
| | |
![]() |
| ابزار هاي گفتگو | جستجو اين تالار |
| نمايش رسم | |
| |
گفتگو هاي مشابه | ||||
| نام گفتگو | شروع کننده گفتگو | تالار | پاسخ ها | آخرين پست |
| استفاده همزمان از چندین سیستم عامل بروی یک سیستم عامل با VirtualBox 2.1.4 | Night Silence | نرم افزارهای یوتیلیتی(Utility) و متفرقه | 0 | 04-19-2009 07:38 AM |
| عالم ذر | نقاب | مقالات | 1 | 11-04-2008 03:37 PM |
| عالم قبل از این عالم ( عالم ذر ) | نقاب | مذهب | 0 | 10-29-2008 11:53 AM |
| كتاب اصول برنامه نويسي - آموزش پايه برنامه نويسي به زبان ساده | mrajabi | برنامه نویسی | 17 | 04-02-2008 12:01 AM |
| برنامه اي عالي براي از بين بردن محدوديت زماني برنامه | k!ng | نرم افزارهای یوتیلیتی(Utility) و متفرقه | 6 | 09-22-2006 11:45 PM |