<?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 als rückgabewert]]></title><description><![CDATA[<p>hallo ich versuche eine ganz einfache unktion zu schreiben<br />
die ein int array als parameter erwartet und ein array zurückgibt, in dem die elemente der größe nach geordnet sind</p>
<p>mein bisheriges ergebnis:</p>
<pre><code>int* nsort(int* x,int size)
{
    int i= 0;
    int j = 1;

    int copy[size];

    for(int i=0; i&lt; size ; i++)
    {
        copy[i] = x[i];
    }

    int temp;

    for(i=0; i &lt; (size-1); i++)
    {
        for(j= i+1; j &lt; (size);j++)
        {
            // cout &lt;&lt; &quot;Vergleich:&quot; &lt;&lt; x[i] &lt;&lt; &quot; &quot; &lt;&lt; x[j] &lt;&lt; endl;

            if( copy[i] &gt; copy[j])
            {
               // cout &lt;&lt; copy[i] &lt;&lt; &quot; groesser als &quot;&lt;&lt; copy[j] &lt;&lt;  endl;

                temp = copy[i];
                copy[i] = copy[j];
                copy[j] = temp;
            }
            else
            {
              //  cout &lt;&lt; x[i] &lt;&lt; &quot; kleiner als &quot;&lt;&lt; x[j] &lt;&lt;  endl;
            }
        }
    }

    return copy;
}
</code></pre>
<p>was läuft da schief?</p>
<p>der mainmethodenaufrur:<br />
[code]<br />
int main()<br />
{<br />
int arr[11]={11,2,3,65,78,2,3,1,1,1,-4};</p>
<p>int *x = nsort(arr, sizeof(arr)/sizeof(int));</p>
<p>for(int i =0;i&lt;11;i++)<br />
{<br />
cout &lt;&lt; arr[i]&lt;&lt; &quot; &quot;;<br />
}<br />
cout &lt;&lt; endl;</p>
<p>for(int i =0;i&lt;11;i++)<br />
{<br />
cout &lt;&lt; x[i]&lt;&lt; &quot; &quot;;<br />
}<br />
}<br />
[code]</p>
<p>ich habe die vermutung dass wegen der lokalen gültigkeit von copy einiges schief geht ...<br />
wie macht man es richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/227239/array-als-rückgabewert</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 04:02:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/227239.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 12 Nov 2008 19:35:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to array als rückgabewert on Wed, 12 Nov 2008 19:35:15 GMT]]></title><description><![CDATA[<p>hallo ich versuche eine ganz einfache unktion zu schreiben<br />
die ein int array als parameter erwartet und ein array zurückgibt, in dem die elemente der größe nach geordnet sind</p>
<p>mein bisheriges ergebnis:</p>
<pre><code>int* nsort(int* x,int size)
{
    int i= 0;
    int j = 1;

    int copy[size];

    for(int i=0; i&lt; size ; i++)
    {
        copy[i] = x[i];
    }

    int temp;

    for(i=0; i &lt; (size-1); i++)
    {
        for(j= i+1; j &lt; (size);j++)
        {
            // cout &lt;&lt; &quot;Vergleich:&quot; &lt;&lt; x[i] &lt;&lt; &quot; &quot; &lt;&lt; x[j] &lt;&lt; endl;

            if( copy[i] &gt; copy[j])
            {
               // cout &lt;&lt; copy[i] &lt;&lt; &quot; groesser als &quot;&lt;&lt; copy[j] &lt;&lt;  endl;

                temp = copy[i];
                copy[i] = copy[j];
                copy[j] = temp;
            }
            else
            {
              //  cout &lt;&lt; x[i] &lt;&lt; &quot; kleiner als &quot;&lt;&lt; x[j] &lt;&lt;  endl;
            }
        }
    }

    return copy;
}
</code></pre>
<p>was läuft da schief?</p>
<p>der mainmethodenaufrur:<br />
[code]<br />
int main()<br />
{<br />
int arr[11]={11,2,3,65,78,2,3,1,1,1,-4};</p>
<p>int *x = nsort(arr, sizeof(arr)/sizeof(int));</p>
<p>for(int i =0;i&lt;11;i++)<br />
{<br />
cout &lt;&lt; arr[i]&lt;&lt; &quot; &quot;;<br />
}<br />
cout &lt;&lt; endl;</p>
<p>for(int i =0;i&lt;11;i++)<br />
{<br />
cout &lt;&lt; x[i]&lt;&lt; &quot; &quot;;<br />
}<br />
}<br />
[code]</p>
<p>ich habe die vermutung dass wegen der lokalen gültigkeit von copy einiges schief geht ...<br />
wie macht man es richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613727</guid><dc:creator><![CDATA[gasst]]></dc:creator><pubDate>Wed, 12 Nov 2008 19:35:15 GMT</pubDate></item><item><title><![CDATA[Reply to array als rückgabewert on Wed, 12 Nov 2008 19:59:06 GMT]]></title><description><![CDATA[<p>gib kein Array zurück sondern nimm die C++ STL Container. Soll heißen, nutze std::vector&lt;T&gt;. <a href="http://www.cplusplus.com/reference/stl/vector/" rel="nofollow">STL Vector</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613730</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613730</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 12 Nov 2008 19:59:06 GMT</pubDate></item><item><title><![CDATA[Reply to array als rückgabewert on Thu, 13 Nov 2008 09:17:58 GMT]]></title><description><![CDATA[<blockquote>
<p>ich habe die vermutung dass wegen der lokalen gültigkeit von copy einiges schief geht</p>
</blockquote>
<p>Exakt.copy ist nur lokal gültig. Und wird somit am Ende des Scopes (der Funktion) wieder zerstört. Du bist aber so mutig und gibst einen Zeiger darauf zurück, der nach der Funktion auf ungültigen Speicher zeigt. (Was undefiniertes Verhalten hervorruft, sprich alles mögliche passieren kann).</p>
<p>Du könntest jetzt aber auf die Idee kommen und dir den Speicher per new holen, was funktioniert und wenn der Benutzer der Funktion den Speicher auch wieder freigibt kein Problem ist. Diese Methode ist aber alles andere, als schön und sollte dringend vermieden werden. Somit bleibt dir nichts anderes übrigt, als das ganze in ein Objekt zu packen, dass Kopiersemantik anbietet. Da kannst du was eigenes schreiben (wenn du ein wenig mehr Erfahrung),oder wie schon gesagt std::vector benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613903</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 13 Nov 2008 09:17:58 GMT</pubDate></item><item><title><![CDATA[Reply to array als rückgabewert on Thu, 13 Nov 2008 14:28:31 GMT]]></title><description><![CDATA[<p>jetz fühl ich mich richtig dumm:</p>
<p>also ich bräuchte folgendes:</p>
<p>eine funktion die mir zu einem array mitn n elementen ein anderes array zurückgibt dessen elemente der größe nach sortiert sind.</p>
<p>wenn ich jetz richtig verstanden hab soll ich statt<br />
int arr[] einen<br />
std::vector&lt;int&gt; vec</p>
<p>verwenden, soweit erstmal richtig?</p>
<p>das problem ist... ich kenn mich nich so aus mit der stl aber wenn ich auf bestimmte elemente zugreifen will mit for(;;) zugreifen will<br />
dass ich da einen iterator benötige oder?</p>
<p>so was in der art</p>
<pre><code>for(i=;i&lt; size;i++)
{
vec.push_back(i);
}
for(i=0;i&lt;size;i++)
{
cout &lt;&lt; vec[i];
}
</code></pre>
<p>sollte eig nicht funktionieren oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1614164</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1614164</guid><dc:creator><![CDATA[gasst]]></dc:creator><pubDate>Thu, 13 Nov 2008 14:28:31 GMT</pubDate></item><item><title><![CDATA[Reply to array als rückgabewert on Thu, 13 Nov 2008 14:36:30 GMT]]></title><description><![CDATA[<p>gasst schrieb:</p>
<blockquote>
<p>das problem ist... ich kenn mich nich so aus mit der stl aber wenn ich auf bestimmte elemente zugreifen will mit for(;;) zugreifen will<br />
dass ich da einen iterator benötige oder?</p>
</blockquote>
<p>Ja und Nein. Der Indexzugriff ist bei bestimmten Containern (wie dem std::vector) erlaubt [sofern genügend Elemente definiert sind], bei anderen (std::list) nicht. Und das Grundprinzip der Iteratoren ist an sich nicht unbedingt viel schwieriger, wenn man sich an die Syntax einmal gewöht hat.</p>
<p>Das folgende ist durchaus erlaubt:</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; vec;
for(int i=0; i&lt;10; ++i)
  vec.push_back(i);
for(int i=0, size=vec.size(); i&lt;size; ++i)
  cout &lt;&lt; vec[i];
</code></pre>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1614172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1614172</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 13 Nov 2008 14:36:30 GMT</pubDate></item></channel></rss>