<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[array-Werte in externer Funktion setzen]]></title><description><![CDATA[<p>Hi,</p>
<p>oh Mann. Ich glaube ich sitze heute schon zu lange vor dem Rechner und sehe den Wald vor lauter Bäumen nicht mehr.<br />
Ich habe mir ein Array gebaut</p>
<pre><code class="language-cpp">double Array[10][5];
</code></pre>
<p>Nun steht dieser in einer Hauptfunktion, z.B. main().</p>
<p>Dann versuche ich diesen mit Werten in einer separaten Funktion mit Inhalten aus einer txt-Datei zu setzen, also etwa so:</p>
<pre><code class="language-cpp">int main () {
  double Array[10][5];
  //[...]
  set_array(inputfile, Array);
  //[...]
}

void set_array(istream&amp; str, double cont[10][5]) {
  //[...]

  while (!str.eof()) {
    string data = &quot;&quot;;
    str &gt;&gt; data;

    cont[row][col] = atof(data.c_str());
    row++;
    //[...]
  }
}
</code></pre>
<p>Mein Problem ist jetzt, dass in der lokalen Funktion set_array nur ein 5*1 großes array enthalten ist. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Wie muss die korrekte Übergabe des ganzen Arrays aussehen, damit alle Werte in set_array gesetzt werden können?</p>
<p>P.S. Ja ich möchte mit einem array arbeiten, nicht mit Vektoren <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/306940/array-werte-in-externer-funktion-setzen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 07 Aug 2026 03:02:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/306940.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 11 Aug 2012 12:05:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to array-Werte in externer Funktion setzen on Sat, 11 Aug 2012 12:05:35 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>oh Mann. Ich glaube ich sitze heute schon zu lange vor dem Rechner und sehe den Wald vor lauter Bäumen nicht mehr.<br />
Ich habe mir ein Array gebaut</p>
<pre><code class="language-cpp">double Array[10][5];
</code></pre>
<p>Nun steht dieser in einer Hauptfunktion, z.B. main().</p>
<p>Dann versuche ich diesen mit Werten in einer separaten Funktion mit Inhalten aus einer txt-Datei zu setzen, also etwa so:</p>
<pre><code class="language-cpp">int main () {
  double Array[10][5];
  //[...]
  set_array(inputfile, Array);
  //[...]
}

void set_array(istream&amp; str, double cont[10][5]) {
  //[...]

  while (!str.eof()) {
    string data = &quot;&quot;;
    str &gt;&gt; data;

    cont[row][col] = atof(data.c_str());
    row++;
    //[...]
  }
}
</code></pre>
<p>Mein Problem ist jetzt, dass in der lokalen Funktion set_array nur ein 5*1 großes array enthalten ist. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Wie muss die korrekte Übergabe des ganzen Arrays aussehen, damit alle Werte in set_array gesetzt werden können?</p>
<p>P.S. Ja ich möchte mit einem array arbeiten, nicht mit Vektoren <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240972</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240972</guid><dc:creator><![CDATA[6H05T]]></dc:creator><pubDate>Sat, 11 Aug 2012 12:05:35 GMT</pubDate></item><item><title><![CDATA[Reply to array-Werte in externer Funktion setzen on Sat, 11 Aug 2012 12:25:27 GMT]]></title><description><![CDATA[<p>6H05T schrieb:</p>
<blockquote>
<p>P.S. Ja ich möchte mit einem array arbeiten, nicht mit Vektoren <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<pre><code class="language-cpp">void set_array(istream&amp; str, double (&amp;cont)[10][5]){ /* ... */ }
</code></pre>
<p>Soll ich auch noch für Dich durchladen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>SCNR...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240975</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Sat, 11 Aug 2012 12:25:27 GMT</pubDate></item><item><title><![CDATA[Reply to array-Werte in externer Funktion setzen on Sat, 11 Aug 2012 12:43:20 GMT]]></title><description><![CDATA[<p>Tja wie gesagt, der Wald vor lauter Bäumen ...<br />
Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
Ich mache jetzt lieber mal eine Pause ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240982</guid><dc:creator><![CDATA[6H05T]]></dc:creator><pubDate>Sat, 11 Aug 2012 12:43:20 GMT</pubDate></item><item><title><![CDATA[Reply to array-Werte in externer Funktion setzen on Sat, 11 Aug 2012 13:14:07 GMT]]></title><description><![CDATA[<p>Da ich die Bäume momentan nicht sehe, würde mich mal interessieren, wo das Problem war, das Furble Wurble anscheinend gelöst hat und wo der Unterschied der beiden Parameterdeklarationen liegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240989</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240989</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Sat, 11 Aug 2012 13:14:07 GMT</pubDate></item><item><title><![CDATA[Reply to array-Werte in externer Funktion setzen on Sat, 11 Aug 2012 14:02:52 GMT]]></title><description><![CDATA[<p>wxSkip schrieb:</p>
<blockquote>
<p>Da ich die Bäume momentan nicht sehe, würde mich mal interessieren, wo das Problem war, das Furble Wurble anscheinend gelöst hat und wo der Unterschied der beiden Parameterdeklarationen liegt.</p>
</blockquote>
<p>Ein Roman:</p>
<p>Das Problem ist, dass ein Array als Parameter (by value) übergeben gleichermaßen &quot;zerfällt&quot; (eng. to decay) zu einem Pointer auf das erste Element im array.<br />
Einmal in der Woche kommt jemand vorbei und meint den ganzen Schnickschnack mit &quot;geilen STL-Containern&quot;(tm) nicht zu brauchen und rauscht genau da rein: durch das übergebene Array lässt sich nicht iterieren, weil keine Größe da ist.<br />
Das gibt immer lange Gesichter. Manche weinen auch.<br />
C übergibt deswegen arrays mit zwei Parametern(Zeiger auf den Anfang und Größe), C++ als Iteratoren auf Anfang und Ende.</p>
<p>Eine Alternative ist das Array per Referenz zu übergeben, dann kommt es zu keinem &quot;Zerfall&quot; und alles ist gut, jedenfalls alles, bis auf den resultierenden Source... So muss der Kollege 6HO5T z.B. jedesmal die Signatur von <code>set_array</code> ändern, wenn er die Dimensionen des Arrays ändert...:(</p>
<p>Ein Ausweg sind templates. Z.B. beschreibt C++11 folgende Templates in &lt;iterator&gt;</p>
<pre><code class="language-cpp">template &lt;class T, size_t N&gt; T* begin(T (&amp;array)[N]);
template &lt;class T, size_t N&gt; T* end(T (&amp;array)[N]);
</code></pre>
<p>(die jeder sich auch selbst schreiben kann, C++11 hin oder her!)(&quot;Left as an exercise to the reader&quot;)</p>
<p>Hier mal der Unterschied im Typ vom Parameter <code>arr</code> . Im gcc jedenfalls ist das sehr auffällig:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;typeinfo&gt;

void array_by_value(int arr[42]){
  std::cout &lt;&lt; typeid(arr).name() &lt;&lt; '\n';
}

void array_by_reference(int (&amp;arr)[42]){
  std::cout &lt;&lt; typeid(arr).name() &lt;&lt; '\n';
}

int main(){
  int arr[42] = { 0 };
  array_by_value(arr);
  array_by_reference(arr);
}
</code></pre>
<p>Lecker Bierchen trinkend,<br />
FW</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2241001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241001</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Sat, 11 Aug 2012 14:02:52 GMT</pubDate></item><item><title><![CDATA[Reply to array-Werte in externer Funktion setzen on Sat, 11 Aug 2012 14:15:05 GMT]]></title><description><![CDATA[<p>Furble Wurble schrieb:</p>
<blockquote>
<p>Ein Ausweg sind templates.</p>
</blockquote>
<p>Bevor ich Mißverstanden werde: ich empfehle ausdrücklichst, die Übergabe von Iteratoren [first, last)!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2241005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241005</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Sat, 11 Aug 2012 14:15:05 GMT</pubDate></item><item><title><![CDATA[Reply to array-Werte in externer Funktion setzen on Sat, 11 Aug 2012 19:01:32 GMT]]></title><description><![CDATA[<p>@Furble Wurble: Das heißt also, er wollte die Arraygröße per sizeof() bestimmen und bekam natürlich das falsche Resultat?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2241051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241051</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Sat, 11 Aug 2012 19:01:32 GMT</pubDate></item><item><title><![CDATA[Reply to array-Werte in externer Funktion setzen on Tue, 14 Aug 2012 08:55:16 GMT]]></title><description><![CDATA[<p>Furble Wurble schrieb:</p>
<blockquote>
<p>Bevor ich Mißverstanden werde: ich empfehle ausdrücklichst, die Übergabe von Iteratoren [first, last)!</p>
</blockquote>
<p>Prinzipiell auch meine Empfehlung. In den angegebenem Code würde ich aber sogar die Verwendung der vector-Klasse vorziehen.</p>
<p>Furble Wurble schrieb:</p>
<blockquote>
<p>Eine Alternative ist das Array per Referenz zu übergeben, dann kommt es zu keinem &quot;Zerfall&quot; und alles ist gut, jedenfalls alles, bis auf den resultierenden Source... So muss der Kollege 6HO5T z.B. jedesmal die Signatur von <code>set_array</code> ändern, wenn er die Dimensionen des Arrays ändert...:(</p>
</blockquote>
<p>Allerdings entsprechen die angegebenen Zeilen nur ganz entfernt meinem Programm und dabei eignet sich die Verwendung von arrays mit in der Eingabe gesetzten Größen als durchaus sinnvoll <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2241705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241705</guid><dc:creator><![CDATA[6H05T]]></dc:creator><pubDate>Tue, 14 Aug 2012 08:55:16 GMT</pubDate></item><item><title><![CDATA[Reply to array-Werte in externer Funktion setzen on Tue, 14 Aug 2012 09:24:49 GMT]]></title><description><![CDATA[<p>6H05T schrieb:</p>
<blockquote>
<p>Allerdings entsprechen die angegebenen Zeilen nur ganz entfernt meinem Programm</p>
</blockquote>
<p>Was bedeutet, dass du uns zu deiner Problemschilderung Code geliefert hast, der nur ganz entfernt mit dem Problem zu tun hat. Weshalb du Lösungsvorschläge bekommst, die nur ganz entfernt mit der richtigen Lösung deines Problems zu tun haben können. Bewusste Irreführung wie du sie betreibst ist noch schlimmer als garkeinen Code zu liefern.</p>
<blockquote>
<p>und dabei eignet sich die Verwendung von arrays mit in der Eingabe gesetzten Größen als durchaus sinnvoll <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
</blockquote>
<p>Das ist eine Behauptung, die dir niemand widerlegen kann (weil du uns den Code nicht gezeigt hast), die aber jeder bezweifeln kann, der ein wenig mehr Erfahrung mit solchen Dingen hat (weil die C-Arrays nur sehr sehr selten die bessere Alternative sind, wenn überhaupt).</p>
<p>Zusammengefasst: es lohnt nicht, hier noch groß zu diskutieren, weils alles nur Spekulation ist, solang du uns nicht den echten Code zeigst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2241718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241718</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 14 Aug 2012 09:24:49 GMT</pubDate></item><item><title><![CDATA[Reply to array-Werte in externer Funktion setzen on Tue, 14 Aug 2012 11:34:18 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>6H05T schrieb:</p>
<blockquote>
<p>Allerdings entsprechen die angegebenen Zeilen nur ganz entfernt meinem Programm</p>
</blockquote>
<p>Was bedeutet, dass du uns zu deiner Problemschilderung Code geliefert hast, der nur ganz entfernt mit dem Problem zu tun hat. Weshalb du Lösungsvorschläge bekommst, die nur ganz entfernt mit der richtigen Lösung deines Problems zu tun haben können. Bewusste Irreführung wie du sie betreibst ist noch schlimmer als garkeinen Code zu liefern.</p>
<blockquote>
<p>und dabei eignet sich die Verwendung von arrays mit in der Eingabe gesetzten Größen als durchaus sinnvoll <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
</blockquote>
<p>Das ist eine Behauptung, die dir niemand widerlegen kann (weil du uns den Code nicht gezeigt hast), die aber jeder bezweifeln kann, der ein wenig mehr Erfahrung mit solchen Dingen hat (weil die C-Arrays nur sehr sehr selten die bessere Alternative sind, wenn überhaupt).</p>
<p>Zusammengefasst: es lohnt nicht, hier noch groß zu diskutieren, weils alles nur Spekulation ist, solang du uns nicht den echten Code zeigst.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> Keine Angst, ein bisschen etwas verstehe ich auch von Programmierung...<br />
Mir ging es im Grunde nur darum, dass jemand diesen kleinen Fehler der nicht vorhandenen Klammern sieht. Ansonsten werde ich, auch wenn es vielleicht (durch welchen fortgeschrittenen Programmierer auch immer) 'besseren' Code gibt, diesen nicht ändern.<br />
Damit ist mein Problem exakt gelöst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> und es erübrigt sich wirklich jede weitere Diskussion ...</p>
<p>Aber ich verstehe trotzdem was du meinst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2241778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241778</guid><dc:creator><![CDATA[6H05T]]></dc:creator><pubDate>Tue, 14 Aug 2012 11:34:18 GMT</pubDate></item></channel></rss>