Presentation is loading. Please wait.

Presentation is loading. Please wait.

بنام خدا زبان برنامه نویسی C (21814( Lecture 12 Selected Topics

Similar presentations


Presentation on theme: "بنام خدا زبان برنامه نویسی C (21814( Lecture 12 Selected Topics"— Presentation transcript:

1 بنام خدا زبان برنامه نویسی C (21814( Lecture 12 Selected Topics Part II

2 مثال هایی در مورد کاربرد های Pointers
زبان برنامه نویسی C (21814 ( مثال هایی در مورد کاربرد های Pointers

3 زبان برنامه نویسی C (21814 ( Dynamic Memory Allocation
تخصیص حافظه بصورت دینامیک: هدف گرفتن حافظه از سیستم عامل می باشد. مساله: در زبان برنامه نویسی C، مطابق آنچه تا کنون بیان شد، طول آرایه ها در ابتدای برنامه تعِیین می شود. اگر بتوان به روشی طول آرایه ها را هنگام اجرای برنامه، نه هنگام کامپایل کردن آن تعیین کرد می توان از حافظه استفاده بهتری نمود. این روش در سیستم عامل Windows با گرفتن حافظه برای آرایه انجام می شود.

4 زبان برنامه نویسی C (21814 ( Dynamic Memory Allocation
هر برنامه ای در Windows98 یا Windows XP می تواند تا 4 GBytes از حافظه را استفاده کند. لذا بایستی در داخل برنامه امکاناتی را فراهم نمود تا از این امکانات سیستم عامل استفاده شود. فرایند 'memory allocation' در مورد سیستم عامل برای این منظور کاربرد دارد.

5 زبان برنامه نویسی C (21814 ( Dynamic Memory Allocation
در این راستا تابعی بصورت void * malloc ( int size) وجود دارد که این کار را انجام می دهد. در این جا size مقدار فضای مورد نیاز می باشد. این تابع یک pointer که به اولین byte حافظه تخصیص یافته جدید اشاره می کند را باز می گرداند. نوع این pointer می تواند هر نوعی باشد ( char *, int *, etc.) حافظه تخصیص یافته می تواند به هر نحوی به کار رود.

6 زبان برنامه نویسی C (21814 ( Dynamic Memory Allocation
مثال: #include <stdio.h> #include <stdlib.h> #define SIZE 1000 int main(void) { int *p, i; p = (int *)malloc(SIZE * sizeof(int)); // p can be considered an array of SIZE ints for (i=0; i < SIZE; ++i) p[i] = rand(); // init to random numbers free(p); return 0; }

7 زبان برنامه نویسی C (21814 ( Dynamic Memory Allocation
با استفاده از void free(void * ptr) می توان حافظه تخصیص یافته را مجددا پس از استفاده آزاد کرد. ptr در واقع pointer است که به ابتدای حافظه تخصیص یافته اشاره می کند. برنامه هایی که حافظه گرفته شده را آزاد نکنند، اصطلاحا برنامه های دارای نشتی حافظه (memory leak) نام دارند. حافظه های آزاد نشده غیر قابل استفاده بوده و اصطلاحا garbage نامیده می شوند.

8 مقادیرp[2] و *p بترتیب کدامند؟
زبان برنامه نویسی C (21814 ( قسمتی از یک برنامه را برای دو سوال زیر در نظر بگیرید: char a[ ] = "abc", *p = a; مقادیرp[2] و *p بترتیب کدامند؟ الف 'a' = *p 'b' p[2] = 'a' = *p 'c' p[2] = 'b‘ = *p 'b' p[2] = د 'b' = *p 'c' p[2] =

9 زبان برنامه نویسی C (21814 ( قسمتی از یک برنامه را برای دو سوال زیر در نظر بگیرید: char a[ ] = "abc", *p = a; مقادیر++(*p) و *(++p) بترتیب کدامند؟ الف- 'b' = ++(*p) 'b' *(++p)= ب 'a' = ++(*p) 'b' *(++p)= 'b' = ++(*p) 'a' *(++p)= د 'a' = ++(*p) 'a' *(++p)=

10 زبان برنامه نویسی C (21814 ( هنگام تعریف متغیر های pointer لازم نیست که علامت * به نام متغیر بچسبد. در صورت وجود space همچنان متغیر بصورت pointer شناخته می شود. هنگام برنامه نویسی بهتر است برای سهولت درک برنامه، متغیر های pointer با اضافه کردن ptr به آخرنام متغیر از سایر متغیر ها متمایز شوند.


Download ppt "بنام خدا زبان برنامه نویسی C (21814( Lecture 12 Selected Topics"

Similar presentations


Ads by Google