C++ - Programm Offenbar Druck-Speicher-Adresse anstelle von Array
#include <iostream>
using namespace std;
int main(){
int findMax(int *);
const int MAX = 100;
int values[MAX];
char ivals[256];
//Get the space-separated values from user input.
cin.getline(ivals, 256, '0');
char *helper;
//Clean input array and transfer it to values.
for(int i = 0; i < (MAX) && ivals[i] != 0; i++){
helper = ivals[i * 2];
values[i] = atoi(helper);
}
int mval = findMax(values);
cout << values << endl << mval;
return 0;
}
//Function to find the maximum value in the array
int findMax(int arr[]){
int localmax = 0;
for(int i = 0; i < (sizeof(arr)/sizeof(int)); i++){
if(arr[i] > localmax){
localmax = arr[i];
}
}
return localmax;
}
Der Zweck dieses Programms ist für den Benutzer bei der Eingabe eine durch Leerzeichen getrennte Reihe von Werten, die damit endete eine 0. Das array wird dann analysiert, um zu finden, die max. Ich herausgefunden, wie zu konvertieren, was ist ursprünglich ein char[] in ein int [], so dass ich verwenden können, die findMax () - Funktion auf, ohne Fehler, aber die Sortier-loop scheint ein eigenes problem und wenn "cout << Werte << endl << mval;" aufgerufen wird, gibt es nur eine Speicher-Adresse, anstatt was sein sollte, eine nicht-proportionale Folge von int-Werten. Kann jemand erklären, was ich falsch mache? Es scheint, dass ich möglicherweise einen Fehler gemacht mit dem Zeiger, aber ich kann nicht herausfinden, was.
- Verwandte : stackoverflow.com/questions/2037736/finding-size-of-int-array und stackoverflow.com/questions/1975128/...
- Karpfen: noch einmal: ein array ist kein pointer, es hat eine andere Art, die Größe... die Sprache führt die automatische Konvertierung von arrays, um die Adresse des ersten Elements im array, aber das ist es. Zu sagen, dass ein array ein Zeiger ist wie gesagt, dass ein int ist eine doppelte, nur weil
int i = 10; double d = i;
kompiliert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Drucken
values
nicht drucken Sie den Inhalt des Arrays, wie Sie es erwarten, wird es drucken Sie den Speicherplatz des ersten Elements des Arrays.Probieren Sie etwas wie dies:
Sorry das ich nicht post eigentlichen code, aber Ihre original-Beitrag ist ein Chaos mit vielen syntax und syntaktische Fehler.
EDIT: Im Interesse, mehr vollständig und ansprechbar & verständlich für Anfänger, ich habe ein kleines Programm geschrieben, das zeigt, 4 Wege, dies zu erreichen.
Methode 1 verwendet
copy
mit einemostream_iterator
wie ich es getan habe vor.Methode 2 unten ist wohl die grundlegendste & einfachste zu verstehen.
Methode 3 ist eine C++0x-Methode. Ich weiß die Frage ist tagged-C++, aber ich dachte, es könnte lehrreich sein, fügen Sie diese.
Methode 4 ist eine C++ - Ansatz mit einem
vector
undfor_each
. Ich habe umgesetzt Funktor, dass nicht die dumping.Teilen & Genießen
copy
können auf diese Weise verwendet werden, jedoch.Wenn Sie übergeben, um ein array von X, es ist wirklich ein Zeiger auf ein array von X, Sie sind vorbei. Also, wenn Sie pass
values
zu cout, es hat nur den Mauszeiger auf drucken.Sollte man einen Blick in einige der standard-algorithmen, um Ihr Leben einfacher.
Beispielsweise zum drucken von allen Elementen in einem array kann man nur schreiben
Zu finden, die max-element, das Sie könnte einfach schreiben
Sodass Ihr code wird
Tun dies beseitigt die Notwendigkeit für Ihre Methode findMax insgesamt.
Ich würde auch re-schreiben Sie Ihren code so, dass Sie mit einem Vektor anstelle eines Arrays. Das macht Ihren code sogar kürzer. Und Sie können stringstream zum konvertieren von strings in zahlen.
Etwas wie dieses arbeiten soll, und ist viel weniger code als das original.
std::max_element
- das ist, wie dieser code geschrieben werden sollten, in den ersten Platz sowieso.Array von int ist, gefördert werden, um einen Zeiger auf int, wenn an eine Funktion übergeben. Es gibt keinen operator << unter gewöhnlichen array. Wenn Sie verwenden möchten, operator << auf diese Weise müssen Sie die Verwendung von std::vector statt.
Hinweis: es ist technisch möglich, zu unterscheiden, array, wenn an eine Funktion übergeben, mit Vorlage, aber das ist nicht implementiert, für standard-operator <<.
sizeof(arr) ist hier die Größe der Zeiger auf das array. C++ wird nicht die tatsächliche array, das wäre höchst ineffizient. Sie würden in der Regel erhalten nur einen Durchlauf durch die Schleife. Deklarieren Sie Ihre Funktion wie folgt:
Aber, wirklich, die Verwendung eines Vektors.
Oh, hängt Sie auf, die Frage. Schleife durch das array und Druck jedes einzelnen Elements.