برنامه نویسان کامپیوتر

این وب سایت به منظور استفاده دانشجویان دانشگاه شهید بهشتی کرج ایجاد شده

برنامه نویسان کامپیوتر

این وب سایت به منظور استفاده دانشجویان دانشگاه شهید بهشتی کرج ایجاد شده

جلسه نهم

اشاره گرها:

اشاره­گر (pointer): متغیری است که آدرس یک متغیر دیگر را نگه می دارد. و شکل کلی تعریف اشاره گر به صورت زیر است:

نوع داده*  نام متغیر;

int* p;

p متغیری است که آدرس یک int را نگه می دارد.

float* ptr;

ptr توانایی نگهداری آدرس یک متغیر از نوع float را دارد.

عملگر & آدرس یک متغیر را میدهد.

int x=23;

درون حافظه اصلی، حافظه ای به اندازه یک integer در اختیار x قرار میگیرد و درون آن حافظه 23 نوشته می شود. حافظه ای که به x اختصاص داده شده، آدرسی دارد.

int* p;

p متغیری است که میتواند آدرس یک int را نگه دارد.

p=&x;

درون p آدرس x قرار گرفته (p  به x اشاره میکند.)

cout<<p;

آدرس x چاپ می شود.

 

 

عملگر * محتوای یک آدرس را به ما می دهد.

Cout<<*p;

با مراجعه به آدرس نوشته شده در P به محتوای آن دسترسی پیدا می کنیم.

int x=23;

int* p;// p mitavand adrese 1 int ra negah darad

p=&x;  //

cout<<"\n adrese X="<<p; è آدرس ایکس

cout<<"\n *p="<<*p; è23

خروجی کد زیر چند است؟

float f1=12.25;

float* ptr;

ptr=&f1;

cout<<f1;è 12.25

cout<<ptr;è f1 آدرس

cout<<*ptr;è12.25

f1++;//f1=13.25

cout<<*ptr;è 13.25

cout<<f1;è13.25

*ptr+=10;

cout<<f1;è 23.25

خروجی کدهای زیر چیست؟

int x=23;

            int* p;// p mitavand adrese 1 int ra negah darad

            p=&x;

            cout<<"\n adrese X="<<p;

            cout<<"\n *p="<<*p;//23

            x++;//x=24

            cout<<"\nafter x++ *p="<<*p;// 24

            (*p)++;

            cout<<"\nX="<<x;//X=25

خروجی کدهای زیر چیست؟

int A[5]={12,15,16,10,7};

12

15

16

10

7

 

int* p=&A[0];

cout<<*p;è12

p++;

cout<<*p;è15

نام آرایه بدون اندیس به معنای آدرس اولین عنصر آرایه است. یعنی به جای خط  p=&A[0] میتوان نوشت p=A

خروجی کد زیر چیست؟

char S1[20];

cout<<”\nenter 1 string:”;

gets(S1);

char* p;

p=S1;// p=&S1[0];

p از نوع اشاره گر به کاراکتر است و به حرف اول S1 اشاره می کند (آدرس حرف اول s1 را نگه میدارد.)

for(;*p;p++)

            cout<<*p;

s

a

l

a

m

\0

 

 

 

p

جواب: همه حروف رشته ورودی را چاپ میکند.

سوال: تابعی بنویسید که با دریافت آدرس حرف اول یک رشته تعداد ارقام موجود در رشته را برگرداند.

int countdigit(char* p)

{

int count=0;

for(;*p;p++)

            if(*p<=’9’) &&  (*p>=’0’)            count++;

return count;

}

نحوه استفاده از تابع فوق

Void main()

{

char s[30];

cout<<"\nenter your name:";

gets(s);

cout<<”\n tedade argham moujood dar s=”<<countdigit(s);

 و یا مینویسیم:

cout<<”\n tedade argham moujood dar s=”<<countdigit(&s[0]);

کار کد زیر چیست؟

void func1(char* p)

{

for (;*p;p++)

            (*p)++;

}

void main(){

            char s1[30];

            cout<<”\nenter 1 string:”;

            gets(s1);

            func1(s1);

            cout<<”\nS1=”<<s1;

}

اگر برای ورودی کد فوق عبارت abc23 وارد شود در خروجی bcd34 چاپ میشود.

به کمک دستور new می توان به تعداد مد نظر حافظه را از سیستم بگیریم.

int  x;

cin>>x;

int A[x];

کد فوق به علت متغیر بودن x خطا دارد.

int*  A;

int  x;

cin>>x;

A=new int[x];

در کد فوق تعداد عناصر آرایه توسط کاربر مشخص میشود. دستور new  به کمک اشاره گر به تعداد دلخواه حافظه در اختیار برنامه قرار می دهد.

خروجی کد زیر چیست؟

int  A[5]={2,3,4,1,5};

int* p=A;

cout<<A[*p+2];//cout<<A[2+2];è5

cout<<*(p+*p);//cout<<*(p+2);è4

 

مثال: تابعی بنویسید که دو اشاره­گر به کاراکتر را دریافت کرده و بررسی کند که آیا رشته متناظر با اشاره گر دوم در رشته متناظر با اشاره گر اول وجود دارد یا خیر

 

 #include <iostream.h>

 #include <string.h>

 #include <stdio.h>

 int instr(char* p1,char* p2)

{mohamadreza

reza

int k=0;

            for(;*p1;p1++)

                        while (*p1==*p2 && *p2 && *p1)

                                    {

                                    p1++;

                                    p2++;

                                    k++;

                                    if (k==strlen(p2))return 1;

                                    }

            return 0;

}

 void main()

 {

  char S1[30],S2[30];

  gets(S1);

  gets(S2);

  cout<<instr(S1,S2);

  }

تابع strcat را با نام newstrcat شبیه سازی کنید

Char s1[30]=”ali”;

Char s2[30]=”reza”;

Strcat(s1,s2);

Cout<<s1;èalireza

 

 

تابعی بنویسید که اشاره گر به کاراکتر را دریافت و تمامی حروف بزرگ آن رشته را کوچک کند.

جواب هر دو سوال فوق

 

 

void Lcase(char* p)

                         {

                                    for(;*p;p++)

                                                if(*p>='A' && *p<='Z')

                                                                        *p+=32;

                         }

 

void newstrcat(char* p1,char* p2)

{

int k=strlen(p1);

for(;*p2;p2++,k++)

            *(p1+k)=*p2;

 

 *(p1+k)='\0';

}

void main(){

char s1[50];

cout<<"\nenter 1 string:";

gets(s1);

Lcase( s1);

cout<<"\n"<<s1;

char s2[50];

cout<<"\nenter 1 string:";

 gets(s2);

 newstrcat(s1,s2);

 cout<<s1;


دانلود فایل مثال ها

(*.cpp)


 

نظرات 0 + ارسال نظر
ایمیل شما بعد از ثبت نمایش داده نخواهد شد