Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wskaźniki ;/

Ostatnio zmodyfikowano 2015-03-29 14:01
Autor Wiadomość
Anim
Temat założony przez niniejszego użytkownika
Wskaźniki ;/
» 2015-03-29 13:23:09
PO co mi te wskaźniki ^^... A na poważnie. Miałem do zrobienia zadanie obliczające iloczyn skalarny dwóch wektorów, przy czym miało to zostać wykonane na wskaźnikach. Zadanie zrobiłem, ale nie ukrywam że użycie wskaźników przeze mnie było robione w sposób "spontaniczny", metodą prób i błędów i wskazówek kompilatora i różnych programów, które znalazłem w Internecie. I mimo, że program działa, to nadal nie wiem , dlaczego tak działają wskaźniki w tym programie. Jeżeli moglibyście mi odpowiedzieć na pytanie do poniższego kodu i wskaźników (ciężko być samoukiem ;p ) :

C/C++
#include <iostream>
#include <cstdio>
#include <conio.h>


void czytaj( int *, int *, int * );
void I_skalarny( int *, int *, int );
int rozmiar, X[ 10 ], Y[ 10 ];


int main( int argc, char ** argv )

{
   
    printf( "Program do obliczania iloczynu skalarnego dwoch wektorow\n" );
   
   
    czytaj( & rozmiar, X, Y );
    I_skalarny( X, Y, rozmiar );
   
    getch();
    return 0;
}

void czytaj( int * wektor_size, int * wsk_X, int * wsk_Y )
{
    printf( "Podaj prosze rozmiar wektorow, ale nie wiekszy niz 10: " );
    std::cin >> * wektor_size;
   
    if( * wektor_size > 10 )
    {
        printf( "Podales zbyt duzy rozmiar !! Maksymalnie 10 !!\n" );
        czytaj( & rozmiar, X, Y );
    }
   
    else
    {
        printf( "\n%d\n", sizeof( X ) );
       
        printf( "\nPodaj elementy wektora.\n" );
        printf( "Wektor pierwszy: \n" );
        for( int i = 0; i < * wektor_size; i++ )
        {
            printf( "\n[%d] = ", i );
            std::cin >> *( wsk_X + i );
        }
       
        printf( "\n%d\n", sizeof( X ) );
       
        printf( "Wektor drugi: \n" );
        for( int i = 0; i < * wektor_size; i++ )
        {
            printf( "\n[%d] = ", i );
            std::cin >> *( wsk_Y + i );
        }
    }
   
}

void I_skalarny( int * wsk_X, int * wsk_Y, int n )
{
    int suma = 0;
   
    for( int i = n - 1; i >= 0; i-- )
    {
        suma += *( wsk_X + i ) * *( wsk_Y + i );
    }
   
    printf( "Iloczyn skalarny wektorow X i Y wynosi: %d", suma );
}

1) Dlaczego przy wywołaniu funkcji czytaj() znak & stawiam tylko przy "rozmiar" , a przy X,Y nie muszę tego robić ?
2) Kiedy używać wskaźników, a kiedy referencji ?

To chyba póki co te dwa pytania ;p
P-129411
Szadziu
» 2015-03-29 13:34:08
1. Ponieważ nazwa tablicy jest wskaźnikiem na jej pierwszy element.
P-129412
Anim
Temat założony przez niniejszego użytkownika
» 2015-03-29 13:49:48
hm. To logiczne :) A Pan Grębosz tyle razy to podkreślał ^^ Dzięki :)
P-129413
pekfos
» 2015-03-29 14:01:38
2) Kiedy używać wskaźników, a kiedy referencji ?
Wskaźników, gdy dopuszczasz przekazanie niczego. Referencji, gdy nie możesz oryginału przekazać przez wskaźnik. W pozostałych przypadkach zamiennie, z przewagą dla referencji, bo są wygodniejsze.
P-129414
« 1 »
  Strona 1 z 1