zapisywanie do tablicy za pomocą wskźnika w pętli for
Ostatnio zmodyfikowano 2019-01-31 01:19
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 #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; 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; } |
|
pekfos |
» 2019-01-28 20:34:34 Nie modyfikuj wskaźnika. |
|
wirusomaniak Temat założony przez niniejszego użytkownika |
» 2019-01-28 20:44:46 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? |
|
pekfos |
» 2019-01-28 20:46:59 Bo nie próbujesz potem używać tego wskaźnika, jak gdyby nie był modyfikowany? |
|
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. |
|
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 ? |
|
pekfos |
» 2019-01-28 21:31:28 WskaźnikiJeś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ą. |
|
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? |
|
« 1 » 2 |