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

zapisywanie do tablicy za pomocą wskźnika w pętli for

Ostatnio zmodyfikowano 2019-01-31 01:19
Autor Wiadomość
wirusomaniak
Temat założony przez niniejszego użytkownika
zapisywanie do tablicy za pomocą wskźnika w pętli for
» 2019-01-28 20:29:17
C/C++
#include <iostream>

using namespace std;

float srednia_aryt( int, float * );

int main()
{
    int ile;
    cout << "Ile szufladek tablicy mam utworzyc?: ";
    cin >> ile;
    float * t;
    t = new float[ ile ];
    for( int i = 0; i < ile; i++ )
    {
        cout << "Podaj wartosc dla indeksu nr. " << i << " :";
        cin >> * t;
        t++;
    }
    cout << t[ 0 ] << " " << t[ 1 ] << " " << t[ 2 ] << " " << t[ 3 ] << " " << t[ 4 ] << endl; // po wywolaniu program pokazuje tu losowe wartości.
    cout << "Srednia aryt z liczb zawartych w tablicy wynosi: " << srednia_aryt( ile, t ) << endl;
    delete[] t;
    return 0;
}
float srednia_aryt( int ile, float * t )
{
    float sred_aryt = 0;
    for( int i = 0; i < ile; i++ )
    {
        sred_aryt += * t;
        t++;
    }
    return sred_aryt / ile;
}
P-173764
pekfos
» 2019-01-28 20:34:34
Nie modyfikuj wskaźnika.
P-173765
wirusomaniak
Temat założony przez niniejszego użytkownika
» 2019-01-28 20:44:46
   
C/C++
for( int i = 0; i < ile; i++ )
{
    cout << "Podaj wartosc dla indeksu nr. " << i << " :";
    cin >> t[ i ];
}
cout << t[ 0 ] << " " << t[ 1 ] << " " << t[ 2 ] << " " << t[ 3 ] << " " << t[ 4 ] << endl;
Wiem, że mógłbym napisać tak. Ale czy mógłbyś mi wytłumaczyć, dlaczego w podprogramie mogę pracować tak na wskaźniku a w funkcji main nie?
P-173766
pekfos
» 2019-01-28 20:46:59
Bo nie próbujesz potem używać tego wskaźnika, jak gdyby nie był modyfikowany?
P-173767
wirusomaniak
Temat założony przez niniejszego użytkownika
» 2019-01-28 20:57:05
A no tak bo tylko odczytuje informacje ze wskaźnika a nie modyfikuję go. Przepraszam teraz rozumiem.
P-173768
wirusomaniak
Temat założony przez niniejszego użytkownika
» 2019-01-28 21:24:55
Teraz zapytam z ciekawości. Dlaczego nie mogę modyfikować tego wskaźnika? Jakie to niesie skutki w wyniku których dochodzi do takiego niechcianego zachowania programu?
Ja to rozumiem tak że że po zapisie t=new float[ile]; wskaźnik wskazuje na określony przedział pamięci gdy teraz użyje formuły
cin >> *t; to zapisuje do zerowego indeksu wartość wprowadzoną przez użytkownika, następnie t++; przenosi wskaźnik na kolejny indeks  i przy kolejnym wywołaniu instrukcji cin >>*t; zapisuje wartość na kolejnym indeksie... po użyciu cout <<t[0]<<" "<<t[1]<<endl; wyświetlam te wartości.. W czym tkwi błąd w moim rozumowaniu ?
P-173771
pekfos
» 2019-01-28 21:31:28
» Kurs C++ » Poziom 5Wskaźniki lekcja
Jeśli wskaźnik p wskazuje na drugi element tablicy, to p[0] odnosi się do drugiego elementu tablicy. Indeksujesz względem wskaźnika, a nie oryginalnej tablicy (no bo i jak, wskaźnik to tylko liczba). Dodatkowo do delete musisz podać wartość zwróconą z new, a nie zmodyfikowaną.
P-173772
wirusomaniak
Temat założony przez niniejszego użytkownika
Udało się
» 2019-01-29 00:36:11
Czyli jak ustawiam p++; to oznacza ze p[0] bedzie ustawione na 4 bajty dalej i p[1] bedzie 4 bajty dalej a nie p=p[1]. Dziękuję w końcu zrozumiałem.
A w pod programie caly czas ustawiam wartosc t[0] ale przesuwam ja o 4 bajty w prawo ale we funckji main  jest to widziane jako t[1] bo podprogram ma odrębne nazwy. Dobrze to teraz rozumiem?
P-173783
« 1 » 2
  Strona 1 z 2 Następna strona