Problem ze wskaźnikami - C++ 4138 6

O temacie

Autor DominikT

Zaczęty 11.02.2013 roku

Wyświetleń 4138

Odpowiedzi 6

DominikT

DominikT

Użytkownicy
posty161
Propsy69
  • Użytkownicy

DominikT

Problem ze wskaźnikami - C++
2013-02-11, 21:52(Ostatnia zmiana: 2013-02-20, 17:53)
Witajcie , Mam pewien problem ( nie tak jak większość że czegoś nie umiem zrobić tylko że coś zrobiłem ale tego nie rozumiem :P ) I proszę o wytłumaczenie w jaki sposób działa to że nie musze wyłuskiwać wartości spod adresu zm(zmiennej lokalnej ) . Pewnie jest to bardzo banalne ale proszę o pomoc bo z kursu w którym się ucze zostało to troszeczke pominięte :P a tutaj kod : int *  przemnozZm (int * , int ) ;

]int main ;
{
int a = 10 ;
cout << a << endl ;

int *b ;
b  = przemnozZm (&a, 5) ;
*b = 60 ;
cout << a << endl;
cout << *b << endl;
}

int * przemnozZm (int *zm , int ile )
{
// int *zm = &a ;

*zm *= ile ;

return zm  ;
}
 
Spoiler
Programie nasz, któryś jest w pamięci

Swięć się nazwa twoja

Bądź system operacyjny twój

Wykonuj funkcje swoje

I na drukarce i na ekranie



I daj nam nasze dane

I wybacz nam nasze błędy

Jako i my wybaczymy

Twoim programistom

I prowadź nas do swego końca



Bo twój jest algorytm

I pętla, i rozwiąnie

Na wieku wieków (jak się zwiesisz)



ENTER

Intel i5 3,2 duo 8 gb ram karta gts250 1gb

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Może zaznacz, czego nie rozumiesz, bo nie bardzo wiem, w czym problem.

DominikT

DominikT

Użytkownicy
posty161
Propsy69
  • Użytkownicy
int * przemnozZm (int *zm , int ile ) . Nie rozumiem w jaki sposób * (asteriks) działa na zmienną a że też jest równa 60 .
 
Spoiler
Programie nasz, któryś jest w pamięci

Swięć się nazwa twoja

Bądź system operacyjny twój

Wykonuj funkcje swoje

I na drukarce i na ekranie



I daj nam nasze dane

I wybacz nam nasze błędy

Jako i my wybaczymy

Twoim programistom

I prowadź nas do swego końca



Bo twój jest algorytm

I pętla, i rozwiąnie

Na wieku wieków (jak się zwiesisz)



ENTER

Intel i5 3,2 duo 8 gb ram karta gts250 1gb

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
Tak się zastanawiam działa ci to ??

int * przemnozZm (int * , int ) ;

int main ; //dlaczego tu jest średnik ?
{
int a = 10 ;
cout << a << endl ;

int *b ;
b = przemnozZm (&a, 5) ;//przekazujesz wskaźnik zmiennej a
*b = 60 ; // b jest w tej chwili wskaźnikiem do a więc zmieniasz wartość a
cout << a << endl;
cout << *b << endl;
}

int * przemnozZm (int *zm , int ile )
{
*zm *= ile ;
return zm ; // zwracasz wskaźnik do a tym samym zapisując go w tym b
}

Przy wskaźnikach spędziłem kilka godzinek i nigdy nie ćwiczyłem sorry jak coś pomieszałem.

DominikT

DominikT

Użytkownicy
posty161
Propsy69
  • Użytkownicy

DominikT

Problem ze wskaźnikami - C++
#4 2013-02-12, 16:28(Ostatnia zmiana: 2013-02-12, 17:38)
Kopiowałem i zobaczyłem że to jest int i już tak z przyzwyczajenia wstawiłem średnik ( jego tam nie ma naprawde ) Kod mi  działa . Jednak (uznajcie mnie za nooba ) ale nie rozumiem //przekazujesz wskaźnik zmiennej a . W jaki sposób przekazuje przecież &a jest adresem , a b przpisuje funkcje przemnozZm która przyjmuje w argumentach adres a oraz 5.
Dokładniej mówiąc : W jaki sposób * przed nazwą funkcji działa na a .
 
Spoiler
Programie nasz, któryś jest w pamięci

Swięć się nazwa twoja

Bądź system operacyjny twój

Wykonuj funkcje swoje

I na drukarce i na ekranie



I daj nam nasze dane

I wybacz nam nasze błędy

Jako i my wybaczymy

Twoim programistom

I prowadź nas do swego końca



Bo twój jest algorytm

I pętla, i rozwiąnie

Na wieku wieków (jak się zwiesisz)



ENTER

Intel i5 3,2 duo 8 gb ram karta gts250 1gb

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
W funkcji przekazujesz referencję do a, a funkcja int * przemnozZm (int *zm , int ile ) zwraca b adres do a. Zmieniając b, zmieniasz także a, bo mają ten sam adres.

DominikT

DominikT

Użytkownicy
posty161
Propsy69
  • Użytkownicy
Dzięki za pomoc , gdy obejrzałem dalszą część kursu koleś wspomniał o tym epizodycznie i dało mi to pewną myśl , i dopiero teraz rozumiem co Adanos miał na myśli :)  Poprostu PrzemnozZm zwraca ADRES a że b = przemnozZm (adres) to jeżeli zmienimy wartość wyłuskaną spod b to adres jest równy a . Też macie takie zaćmienia że nic nie możecie zrobić :P ??
 
Spoiler
Programie nasz, któryś jest w pamięci

Swięć się nazwa twoja

Bądź system operacyjny twój

Wykonuj funkcje swoje

I na drukarce i na ekranie



I daj nam nasze dane

I wybacz nam nasze błędy

Jako i my wybaczymy

Twoim programistom

I prowadź nas do swego końca



Bo twój jest algorytm

I pętla, i rozwiąnie

Na wieku wieków (jak się zwiesisz)



ENTER

Intel i5 3,2 duo 8 gb ram karta gts250 1gb


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry