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

różnice między przesyłaniem 4 elementu tablicy a tablicy 4 elementów

Ostatnio zmodyfikowano 2016-10-08 17:33
Autor Wiadomość
latajacaryba
Temat założony przez niniejszego użytkownika
różnice między przesyłaniem 4 elementu tablicy a tablicy 4 elementów
» 2016-10-07 23:43:59
Witam. Pytanie błahe i w sumie powinienem to wiedzieć, ale lepiej późno, niż wcale.
void funkcja( int tablica) - przesyłanie adresu zerowego elementu tablicy, potem możemy wskazać na ten adres wskaźnikiem i działamy.
void funkcja2( int tablica[4])

I teraz tak: czym się to różni? w 2 kodzie przesyłamy treść 4 elementu czy 4 elementową tablicę? Bo mając taki kod:
C/C++
#include <iostream>
using namespace std;
void n( int t[ 4 ] )
{
    cout << t[ 0 ] << "\t" <<( int ) & t[ 0 ] << endl;
    cout << t[ 1 ] << "\t" <<( int ) & t[ 1 ] << endl;
    cout << t[ 2 ] << "\t" <<( int ) & t[ 2 ] << endl;
    cout << t[ 3 ] << "\t" <<( int ) & t[ 3 ] << endl;
    cout << t[ 8 ] << "\t" <<( int ) & t[ 8 ] << endl;
}

int main()
{
    int tab[ 10 ] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    n( tab );
    return 0;
}

możemy wypisywać treść i adresy elementów innych niż czwarty, np 1,8,9 które nawet nie były przesłane do tablicy. Tak więc?

P-152320
mateczek
» 2016-10-08 04:46:45
w deklaracji nic nie przesyłasz. trzeba rozróżnić deklarację, od wywołania
C/C++
void n( int t[ 4 ] ) //deklaracja. Ta czwórka jest ignorowana. Może jej nie być 
{
    cout << t[ 0 ] << "\t" <<( int ) & t[ 0 ] << endl;
    cout << t[ 1 ] << "\t" <<( int ) & t[ 1 ] << endl;
    cout << t[ 2 ] << "\t" <<( int ) & t[ 2 ] << endl;
    cout << t[ 3 ] << "\t" <<( int ) & t[ 3 ] << endl;
    cout << t[ 8 ] << "\t" <<( int ) & t[ 8 ] << endl;
}

int main()
{
    int tab[ 10 ] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    n( tab ); //wywołanie. Przesyłasz adres początku tablicy(adres jej pierwszego elementu)
    return 0;
}


C/C++
void funkcja( int tablica ) // przesyłanie adresu zerowego elementu tablicy, potem możemy wskazać na ten adres wskaźnikiem i działamy.
żadne przesyłanie, tylko deklaracja funkcji przyjmującej za parametr zmienną int przez wartość.



C/C++
void funkcja2( int tablica[ 4 ] )
Deklaracja funkcji, która przyjmie za parametr tablice typu int (wskaźnik na int). A cyfra cztery w nawiasach kwadratowych jest bez znaczenia!!!


//wskaźnik prawie równa się tablica
C/C++
#include<iostream>
using namespace std;
void wypiszElementyTablicy( int start[], int * end ); //deklaracja funkcji która przyjmuje dwa wskaźniki na int
//lub adresy dwóch elementów tablicy

int main() {
    int tab[ 10 ] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    wypiszElementyTablicy( & tab[ 3 ], tab + 8 );
    //&tab[3] to je to samo co tab+3
    //tab[3] to je to samo co *(tab+3)
}

void wypiszElementyTablicy( int * start, int end[] ) {
    for( int * i = start; i <= end; i++ ) {
        cout <<* i << " ";
    }
    cout << endl;
    //jeszcze raz to samo
    for( int i = 0; i <= end - start; i++ ) {
        cout << start[ i ] << " ";
    }
}
P-152322
latajacaryba
Temat założony przez niniejszego użytkownika
» 2016-10-08 17:33:56
Super, teraz zrozumiałem, czyli w deklaracji ta 4 nie ma znaczenia, i mogłoby być tam równie dobrze 100 i nic by to nie zmieniło? Tak samo nawiasy [] mogłyby być puste i wszystko nadal wychodziłoby na to samo?
P-152335
« 1 »
  Strona 1 z 1