pi 06

background image

Wykład 7-8

• Zmienna i jej aspekty
• Zmienna wskaźnikowa
• Przydział pamięci dla zmiennych
• Działania na zmiennych wskaźnikowych
• Zastosowanie typu wskaźnikowego
• Przykłady

background image

Zmienna

Aspekty zmiennej:
• nazwa
• adres (lokacja)
• wartość
• typ
• rozmiar

int x;

{
...

x=234;

...
}

234

32000

32005

background image

Instrukcja podstawienia

<zmienna> = <wyrażenie>

z1 = z2 = z3 = wyrażenie (podstawienie wielokrotne)

z1:=: z2 (podstawienie symetryczne)

z

op

= wyr z = z

op

wyr

background image

Czas istnienia nazwy

Program w C/C++

Program wykonywalny

nazwa zmiennej adres w pamięci

kompilacja

procedure main()

i:=5; j:=7; k:=11
nazwa:=read() #j
m:=variable(nazwa)
write(m) #7
variable(nazwa):=3
write(j) #3

end

Język Icon

background image

Funkcje transformujące

Pascal

Język C

zmienna adres

(dostarcza adres zmiennej)

adres zmienna

a^

*a

var

x:real; absolute adres;

addr(x)

@x

&x

Język Turbo Pascal

background image

Zmienna wskaźnikowa

Zmienna wskaźnikowa - zmienna, która

przechowuje adres innej zmiennej.
Zmienna wskazywana - zmienna, na którą

wskazuje zmienna wskaźnikowa.

Deklaracja zmiennej wskaźnikowej:

int i=23;
int *p;

p = &i;
*p = 29;

23

p

p

23

background image

Zmienna wskaźnikowa i wskazywana

{

int *p;
int *q;
...
*p = 3;
*q = 5;
...

}

p

3

q

5

p

5

q

5

*p = *q

p = q

p

q

5

3

background image

Alokacje i zwalnianie pamięci

struct punkt {

double x,y;

};

punkt *p; {1}

p = new punkt; {2}

...

p->x = 2.0; {3}
p->y = 3.0; {3}

...

delete p; {4}

...

p = NULL; {5}

p

p

?

?
?

p

2.0
3.0

p

?

{1}

{3}

{2}

{4}

p

NULL

{5}

background image

Operacje na zmiennych wskaźnikowych

deklarowanie:

typ *p;

alokacja zmiennej:

p = new typ;

zwalnianie pamięci:

delete p;

przypisanie:

=

operacje logiczne:

== !=

wartość „pusta”:

NULL

wypisanie wartości:

cout << p;

background image

Przydział pamięci

• statyczny
• dynamiczny ze stosu (stack)
• dynamiczny ze sterty (heap)

0000

FFFF

Kod programu

Zm. statyczne

Sterta

Stos

background image

Zastosowania typu wskaźnikowego

• Zmienne dużych rozmiarów
• Nieregularne struktury danych:

• stos, kolejka, talia, lista
• struktura drzewiasta
• struktura grafowa

background image

Tworzenie łańcucha odsyłaczowego (listy)

struct node {

int w;
node *next;

};
node *first;
node *p;
int s, n;

cin >> n;
first=NULL;
for (int i=0; i<n; i++){

cin >> s;
p = new node;
p->next=first;
p->w=s;
first=p;

}

Etapy tworzenia listy:

first

NULL

first

2

5

first

2

7

first

2

5

NULL

NULL

...

NULL

background image

Zastosowanie łańcucha (listy)

W(x)=x^4+5x^3-7x^2+x+3

3

1

-7

5

1

0

struc node {

int wsp;
int wyk;
node *next;

};

double wiel[max];

W(x)=x^10001-5x^737+8x^31+4

0 1 2 3 4 5

w

10001

737

0

31

NULL

1

-5

8

4

background image

Wypisanie wartości wielomianu

Iteracyjnie

void wypisz1(node *p)
{

while (p!=NULL)
{

if (p->wsp>0) cout << ”+”;
cout << p->wsp << ”x^” << p->wyk;
p=p->next;

}

}

background image

Wypisanie wartości wielomianu

Rekurencyjnie

void wypisz2(node *p)
{

if (p!=NULL)
{

if (p->wsp>0) cout << ”+”;
cout << p->wsp << ”x^” << p->wyk;
wypisz2(p->next);

}

}

background image

Wstawianie elementu do listy

procedure wstaw(var first:pnode; m:pnode; wart:integer);
var r : pnode;
begin

new(r); r^.w:=wart;
if m=first then
begin

r^.next:=first; first:=r;

end
else
begin

p:=first;
while first^.next<>m do

first:=first^.next;

r^.next:=first^.next;
first^.next:=r;
first:=p;

end;

background image

Usuwanie elementu z listy

procedure usun(var first : pnode; m : pnode);
var r : pnode;
begin

if m=first then
begin

first:=first^.next;
dispose(m);

end
else
begin

r:=first;
while r^.next<>m do

r:=r^.next;

r^.next:=m^.next;
dispose(m);

end;

end;


Wyszukiwarka

Podobne podstrony:
PI 06 DOC
15 Niewinne święto 'piňata', Drogi prowadzace do Boga, Zestaw o SJ (www dodane pl), Zestaw o ŚJ, 0B,
samoocena - kwestionariusz, IŚ Tokarzewski 27.06.2016, VII semestr, PI
ocena przedsiebiorcy - kwestionariusz, IŚ Tokarzewski 27.06.2016, VII semestr, PI
Pytania - test u Pi-ata (energoelektronika), EiE test piłat 07.06.2009, elektronika
zadania- zarządzanie finan.przedsb. dr Joanna Rutkowska, FP pi ZKO 2005 06 ZAD, ZARZĄDZANIE KAPITAŁE
06 NEO PI R Interpretaccja składników i par czynników
MT st w 06
Kosci, kregoslup 28[1][1][1] 10 06 dla studentow
06 Kwestia potencjalności Aid 6191 ppt
06 Podstawy syntezy polimerówid 6357 ppt
06
06 Psych zaburz z somatoformiczne i dysocjacyjne
GbpUsd analysis for July 06 Part 1
Probl inter i kard 06'03
06 K6Z4

więcej podobnych podstron