<?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[Problem mit Referenzübergabe an Funktion[gelöst]]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

void bubbleSort(int&amp;[]);

int main()
{
	int a[23] = {0};
}

void bubbleSort(int a&amp;[])
{

}
</code></pre>
<p>Das ist falsch, wie wäre es richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/248101/problem-mit-referenzübergabe-an-funktion-gelöst</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 01:29:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/248101.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 19 Aug 2009 18:13:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Sun, 23 Aug 2009 19:59:26 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

void bubbleSort(int&amp;[]);

int main()
{
	int a[23] = {0};
}

void bubbleSort(int a&amp;[])
{

}
</code></pre>
<p>Das ist falsch, wie wäre es richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1763654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1763654</guid><dc:creator><![CDATA[skullyan]]></dc:creator><pubDate>Sun, 23 Aug 2009 19:59:26 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Wed, 19 Aug 2009 18:19:38 GMT]]></title><description><![CDATA[<p>Konkret für deinen Fall:</p>
<pre><code class="language-cpp">void bubbleSort(int (&amp;array)[23]);
</code></pre>
<p>Mit beliebiger Grösse:</p>
<pre><code class="language-cpp">template &lt;size_t S&gt;
void bubbleSort(int (&amp;array)[S]);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1763658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1763658</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 19 Aug 2009 18:19:38 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Wed, 19 Aug 2009 18:20:06 GMT]]></title><description><![CDATA[<p>So ggf?</p>
<pre><code class="language-cpp">void bubbleSort(int* a, int size)
{

}

// oder 

template&lt;size_t size&gt;
void bubbleSort( int ( &amp;a )[size] )
{
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1763659</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1763659</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Wed, 19 Aug 2009 18:20:06 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Wed, 19 Aug 2009 18:22:20 GMT]]></title><description><![CDATA[<p>Jepp, danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1763661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1763661</guid><dc:creator><![CDATA[skullyan]]></dc:creator><pubDate>Wed, 19 Aug 2009 18:22:20 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Wed, 19 Aug 2009 20:13:36 GMT]]></title><description><![CDATA[<p>Je nachdem, wie weit fortgeschritten du dich schon fühlst, könntest du auch versuchen, das Ganze eine Abstraktionsebene höher zu heben und deinen Algorithmus mit einem Iteratorkonzept schreiben. Gerade Bubblesort bietet sich gut als Übung für den Umgang mit Iteratoren an. Das ist sicherlich eine gute Vorbereitung, wenn du später mal die STL-Algorithmen verstehen und nutzen willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1763717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1763717</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 19 Aug 2009 20:13:36 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Wed, 19 Aug 2009 20:32:42 GMT]]></title><description><![CDATA[<p>David_pb schrieb:</p>
<blockquote>
<p>So ggf?</p>
<pre><code class="language-cpp">void bubbleSort(int* a, int size)
{

}

// oder 

template&lt;size_t size&gt;
void bubbleSort( int ( &amp;a )[size] )
{
}
</code></pre>
</blockquote>
<p>UND!</p>
<pre><code class="language-cpp">void bubbleSort(int* a, int size)
{
...
}

// UND

template&lt;size_t size&gt;
void bubbleSort( int ( &amp;a )[size] )
{
   bubbleSort(a,size);
}
</code></pre>
<p>, sonst gibts für jede arraygröße eine eigene funktion.</p>
<p>oder noch besser auf Nexus UND David_pb UND SeppJ UND volkard hören und</p>
<pre><code class="language-cpp">void bubbleSort(int* begin, int* end)
{
...
}

// UND

template&lt;size_t size&gt;
void bubbleSort( int ( &amp;a )[size] )
{
   bubbleSort(a,a+size);
}
</code></pre>
<p>machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1763731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1763731</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 19 Aug 2009 20:32:42 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Thu, 20 Aug 2009 21:26:59 GMT]]></title><description><![CDATA[<p>Habs irgendwie nicht gebacken bekommen: <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="😞"
    /> vlt bin ich auch zu doof dafür</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;time.h&gt;
using namespace std;

template &lt;size_t S, class T&gt;
void bubbleSort(T (&amp;a)[S]);

int main()
{
	time_t t;
	size_t S;
	cin &gt;&gt; S;
    int* a = new int[S];
    srand(time(&amp;t));
    for(int f = 0; f &lt; S; ++f)
        a[f] = rand();
    bubbleSort(a);
    for(int i = 0; i &lt; S; ++i)
        cout &lt;&lt; a[i] &lt;&lt; endl;
	cin.sync();
    cin.get();
}

template &lt;size_t S, class T&gt;
void bubbleSort(T (&amp;a)[S])
{
for(size_t i = 0; i &lt; S ; ++i)
{
    for(size_t i = 0; i &lt; S; ++i)
    if(a[i+1] &gt; a[i])
    {
        size_t tmp;
        tmp = a[i+1];
        a[i+1] = a[i];
        a[i] = tmp;
    }
}
}
</code></pre>
<p>fehler:</p>
<pre><code>error C2784: &quot;void bubbleSort(T (&amp;)[S])&quot;: template-Argument für &quot;T (&amp;)[S]&quot; konnte nicht von &quot;int *&quot; hergeleitet werden.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1764362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764362</guid><dc:creator><![CDATA[skullyan]]></dc:creator><pubDate>Thu, 20 Aug 2009 21:26:59 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Thu, 20 Aug 2009 21:33:35 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;iterator&gt;		// std::ostream_iterator
#include &lt;algorithm&gt;	// std::copy und std::swap
#include &lt;cstddef&gt;		// std::size_t

template &lt;typename T&gt;
void bubbleSort(T* first, T* last)
{
	while(first != last) {
		for(T* cur_elem(first); cur_elem + 1 != last; ++cur_elem) {
			if(*cur_elem &gt; *(cur_elem + 1))
				std::swap(*cur_elem, *(cur_elem + 1));
		}
		--last;
	}
}

template &lt;typename Type, std::size_t Size&gt;
void bubbleSort(Type (&amp;arr)[Size])
{
	bubbleSort(arr, arr + Size);
}

int main()
{
	int arr[] = { 9, 7, 3, 5 };
	bubbleSort(arr);

	std::copy(arr, arr + 4, std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));
	std::cout &lt;&lt; std::endl;

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1764363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764363</guid><dc:creator><![CDATA[Bubbles0rter]]></dc:creator><pubDate>Thu, 20 Aug 2009 21:33:35 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Thu, 20 Aug 2009 21:34:35 GMT]]></title><description><![CDATA[<p>Abwer mit dem alten &quot;int a[23]&quot; klappts?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764364</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 20 Aug 2009 21:34:35 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Thu, 20 Aug 2009 21:40:35 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Abwer mit dem alten &quot;int a[23]&quot; klappts?</p>
</blockquote>
<p>Ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764367</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764367</guid><dc:creator><![CDATA[skullyan]]></dc:creator><pubDate>Thu, 20 Aug 2009 21:40:35 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Thu, 20 Aug 2009 22:03:48 GMT]]></title><description><![CDATA[<p>Fein.</p>
<pre><code class="language-cpp">template &lt;size_t S, class T&gt;//Nur nette Abkürzung für feste Arrays
void bubbleSort(T (&amp;a)[S]){
  bubbleSort(a,a+S);
}

int main()
{
    int* a = new int[S];
    srand(time(&amp;t));
    for(int f = 0; f &lt; S; ++f)
        a[f] = rand();
    bubbleSort(a);//abkürzung geht hier nicht
    bubbleSort(a,a+S);//geht
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1764378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764378</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 20 Aug 2009 22:03:48 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Sat, 22 Aug 2009 15:25:27 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Fein.</p>
<pre><code class="language-cpp">template &lt;size_t S, class T&gt;//Nur nette Abkürzung für feste Arrays
void bubbleSort(T (&amp;a)[S]){
  bubbleSort(a,a+S);
}

int main()
{
    int* a = new int[S];
    srand(time(&amp;t));
    for(int f = 0; f &lt; S; ++f)
        a[f] = rand();
    bubbleSort(a);//abkürzung geht hier nicht
    bubbleSort(a,a+S);//geht
</code></pre>
</blockquote>
<p>Hm, ich verstehe nicht ganz... So wars wohl nicht gemeint: xD</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;time.h&gt;
using namespace std;

template &lt;size_t S, class T&gt;//Nur nette Abkürzung für feste Arrays
void bubbleSort(T (&amp;a)[S]);

int main()
{
    int* a = new int[S];
    srand(time(&amp;t));
    for(int f = 0; f &lt; S; ++f)
        a[f] = rand();
    bubbleSort(a,a+S);//geht 
    for(int i = 0; i &lt; 18; ++i)
        cout &lt;&lt; a[i] &lt;&lt; endl;
    cin.get();
}

template &lt;size_t S, class T&gt;
void bubbleSort(T (&amp;a)[S])
{
for(size_t g = 0; g &lt; S ; ++g)
{
	for(size_t i = 0; i &lt; S; ++i)
	if(a[++i] &gt; a[i])
	{
		size_t tmp;
	    tmp = a[++i];
		a[++i] = a[i];
		a[i] = tmp;
	}
}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1764494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764494</guid><dc:creator><![CDATA[skullyan]]></dc:creator><pubDate>Sat, 22 Aug 2009 15:25:27 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Fri, 21 Aug 2009 19:11:39 GMT]]></title><description><![CDATA[<p>Ich habe das Gefühl, dass Du Templates nicht ganz verstanden hast. Der Begriff ist wörtlich zu nehmen. Wenn Du Dein Template mit</p>
<pre><code class="language-cpp">template&lt;typename T, size_t N&gt;
void bubblesort(T (&amp;array)[N])
{
  ...
  bubblesort-Implementierung
  hier einfügen
  ...
}
</code></pre>
<p>definierst, gibst Du dem Compiler eine Bauanleitung für eine ganze Familie für Funktionen. Wenn Du jetzt also 99 Arrays der Längen 1,2,3,4,5,6,7,...,99 sortieren willst, erzeugt der Compiler 99 verschiedene Funktionen, die aber alle fast das gleiche machen. Ist doch einleuchtend, dass das &quot;ungeschickt&quot; ist, oder? Außerdem kannst Du dann nicht mehr auf Laufzeitgeschehnisse reagieren. Wenn Du zB aus einer Datei eine Liste von Zahlen lädst, die in einem Vektor speicherst, kannst Du die nicht sortieren, weil Du bei der Übersetzung des Programms noch nicht weißt, wieviele Elemente das später in der Datei sein werden. Deswegen hat volkard (und ich in dem anderen Thread) auch vorgeschlagen einen BubbleSort zu definieren, der <em>ohne</em> einen Template-Parameter für die Arraylänge auskommt. Wenn Du darüber hinaus, Arrays mit fester Länge noch sortieren können willst, ohne der Funktion die Länge separat übergeben zu müssen, kannst Du eine &quot;Abkürzung bauen&quot;.</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
void sort(T* const begin, T* const end)
{
  ptrdiff_t const length = end - begin;
  // BubbleSort implementieren
  //
  // erstes Element  = begin[0]
  // zweites Element = begin[1]
  // ...
  // letztes Element = begin[length-1]
}

template&lt;typename T, size_t N&gt;
inline void sort(T (&amp;array)[N])
{
  sort(array,array+N);
}
</code></pre>
<p>Das sind überladende Funktions-Templates.<br />
sort&lt;int&gt; sortiert Sequenzen beliebiger Länge<br />
sort&lt;int,44&gt; kann nur 44-elementige int-Arrays sortieren. Macht aber nix, da es nur sort&lt;int&gt; aufruft -- also nicht besonders komplex ist (kein &quot;code bloat&quot;).</p>
<pre><code class="language-cpp">int main()
{
  int blupp[] = {9,8,7,6,5,4,3,2,1};
  sort(blupp);         // --&gt; sort&lt;int,9&gt;
  sort(blupp,blupp+9); // --&gt; sort&lt;int&gt;
}
</code></pre>
<p>Klar soweit?</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764508</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Fri, 21 Aug 2009 19:11:39 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Sat, 22 Aug 2009 14:39:39 GMT]]></title><description><![CDATA[<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Ich habe das Gefühl, dass Du Templates nicht ganz verstanden hast. Der Begriff ist wörtlich zu nehmen. Wenn Du Dein Template mit</p>
<pre><code class="language-cpp">template&lt;typename T, size_t N&gt;
void bubblesort(T (&amp;array)[N])
{
  ...
  bubblesort-Implementierung
  hier einfügen
  ...
}
</code></pre>
<p>definierst, gibst Du dem Compiler eine Bauanleitung für eine ganze Familie für Funktionen. Wenn Du jetzt also 99 Arrays der Längen 1,2,3,4,5,6,7,...,99 sortieren willst, erzeugt der Compiler 99 verschiedene Funktionen, die aber alle fast das gleiche machen. Ist doch einleuchtend, dass das &quot;ungeschickt&quot; ist, oder? Außerdem kannst Du dann nicht mehr auf Laufzeitgeschehnisse reagieren. Wenn Du zB aus einer Datei eine Liste von Zahlen lädst, die in einem Vektor speicherst, kannst Du die nicht sortieren, weil Du bei der Übersetzung des Programms noch nicht weißt, wieviele Elemente das später in der Datei sein werden. Deswegen hat volkard (und ich in dem anderen Thread) auch vorgeschlagen einen BubbleSort zu definieren, der <em>ohne</em> einen Template-Parameter für die Arraylänge auskommt. Wenn Du darüber hinaus, Arrays mit fester Länge noch sortieren können willst, ohne der Funktion die Länge separat übergeben zu müssen, kannst Du eine &quot;Abkürzung bauen&quot;.</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
void sort(T* const begin, T* const end)
{
  ptrdiff_t const length = end - begin;
  // BubbleSort implementieren
  //
  // erstes Element  = begin[0]
  // zweites Element = begin[1]
  // ...
  // letztes Element = begin[length-1]
}

template&lt;typename T, size_t N&gt;
inline void sort(T (&amp;array)[N])
{
  sort(array,array+N);
}
</code></pre>
<p>Das sind überladende Funktions-Templates.<br />
sort&lt;int&gt; sortiert Sequenzen beliebiger Länge<br />
sort&lt;int,44&gt; kann nur 44-elementige int-Arrays sortieren. Macht aber nix, da es nur sort&lt;int&gt; aufruft -- also nicht besonders komplex ist (kein &quot;code bloat&quot;).</p>
<pre><code class="language-cpp">int main()
{
  int blupp[] = {9,8,7,6,5,4,3,2,1};
  sort(blupp);         // --&gt; sort&lt;int,9&gt;
  sort(blupp,blupp+9); // --&gt; sort&lt;int&gt;
}
</code></pre>
<p>Klar soweit?</p>
<p>Gruß,<br />
SP</p>
</blockquote>
<p>Vom Prinzip her habe ich das jetzt verstanden aber es hapert irgendwie an der Anwendung. Ein Beispiel wäre jetzt hilfreich (am besten direkt an meinem Programm)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764891</guid><dc:creator><![CDATA[skullyan]]></dc:creator><pubDate>Sat, 22 Aug 2009 14:39:39 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Sat, 22 Aug 2009 14:44:26 GMT]]></title><description><![CDATA[<p>Beispiele wurden glaube ich genügend gebracht. Diese umzusetzen ist deine Aufgabe.</p>
<p>Aber vielleicht hilft dir ja <a href="http://magazin.c-plusplus.net/artikel/Einf%FChrung%20in%20die%20Programmierung%20mit%20Templates" rel="nofollow">das</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764897</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 22 Aug 2009 14:44:26 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Sat, 22 Aug 2009 14:44:36 GMT]]></title><description><![CDATA[<p>Beispiel wofür? Wo hapert es denn?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764898</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Sat, 22 Aug 2009 14:44:36 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Sun, 23 Aug 2009 02:51:57 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;time.h&gt;
using namespace std;

void bubbleSort(int* begin, int* end)
{
ptrdiff_t const length = end - begin; 
for(size_t g = 0; g &lt; length ; ++g)
{ 
    for(; begin != end ; (begin+1)) // &lt;--- WARUM IST DAS EINE ENDLOSSCHLEIFE??
	if(*(begin+1) &lt; *begin)
    	{
        size_t tmp;
        tmp = *(begin+1);
        *(begin+1) = *begin;
        *begin = tmp;
	}
}
}

// UND

template&lt;size_t S, typename T&gt;
void bubbleSort( T ( &amp;a )[S] )
{
   bubbleSort(a,a+S);
} 

int main()
{
	size_t S;
	time_t t;
	cin &gt;&gt; S;
    int* a = new int[S];
    srand(time(&amp;t));
    for(int f = 0; f &lt; S; ++f)
        a[f] = rand();
	bubbleSort(a, a+S);//geht
    for(int i = 0; i &lt; 18; ++i)
        cout &lt;&lt; a[i] &lt;&lt; endl;
	cin.sync();
    cin.get();
}
</code></pre>
<p>Hier mein kläglicher Versuch das ganze zu implementieren. Irgendwie komme ich nicht dahinter...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1765055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1765055</guid><dc:creator><![CDATA[skullyan]]></dc:creator><pubDate>Sun, 23 Aug 2009 02:51:57 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Sun, 23 Aug 2009 03:09:35 GMT]]></title><description><![CDATA[<p>skullyan schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void bubbleSort(int* begin, int* end)
{
  ptrdiff_t const length = end - begin; 
  for(size_t g = 0; g &lt; length ; ++g) {
    for(; begin != end ; (begin+1)) // &lt;--- WARUM IST DAS EINE ENDLOSSCHLEIFE??
      if(*(begin+1) &lt; *begin) {
        size_t tmp;
        tmp = *(begin+1);
        *(begin+1) = *begin;
        *begin = tmp;
      }
  }
}
</code></pre>
</blockquote>
<p>(begin+1) verändert begin nicht. Das ist aber auch gut so, weil Du ja mehrmals über die Sequenz laufen willst. Es wäre also eine schlechte Idee, begin in der inneren Schleige zu ändern. Am besten änderst Du begin und end <em>gar nicht</em>.</p>
<p>Für *(begin+x) gibt es übrigens eine Abkürzung: begin[x]. Zeiger und Arrays sind zwar verschieden, bieten aber in dieser Hinsicht dieselbe Syntax für einen Elementzugriff an.</p>
<p>Du solltest außerdem konsistent in der Benutzung des Ganzzahltyps sein. Also entweder komplett ptrdiff_t oder komplett size_t nutzen. ptrdiff_t ist vorzeichenbehaftet, size_t nicht. Ich hatte ptrdiff_t vorgeschlagen, damit, falls end&lt;begin gilt, es keinen Überlauf gibt und die Funktion einfach nichts tut, statt zu einem Absturz zu führen.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1765142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1765142</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Sun, 23 Aug 2009 03:09:35 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Sun, 23 Aug 2009 12:54:57 GMT]]></title><description><![CDATA[<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>skullyan schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void bubbleSort(int* begin, int* end)
{
  ptrdiff_t const length = end - begin; 
  for(size_t g = 0; g &lt; length ; ++g) {
    for(; begin != end ; (begin+1)) // &lt;--- WARUM IST DAS EINE ENDLOSSCHLEIFE??
      if(*(begin+1) &lt; *begin) {
        size_t tmp;
        tmp = *(begin+1);
        *(begin+1) = *begin;
        *begin = tmp;
      }
  }
}
</code></pre>
</blockquote>
<p>(begin+1) verändert begin nicht. Das ist aber auch gut so, weil Du ja mehrmals über die Sequenz laufen willst. Es wäre also eine schlechte Idee, begin in der inneren Schleige zu ändern. Am besten änderst Du begin und end <em>gar nicht</em>.</p>
<p>Für *(begin+x) gibt es übrigens eine Abkürzung: begin[x]. Zeiger und Arrays sind zwar verschieden, bieten aber in dieser Hinsicht dieselbe Syntax für einen Elementzugriff an.</p>
<p>Du solltest außerdem konsistent in der Benutzung des Ganzzahltyps sein. Also entweder komplett ptrdiff_t oder komplett size_t nutzen. ptrdiff_t ist vorzeichenbehaftet, size_t nicht. Ich hatte ptrdiff_t vorgeschlagen, damit, falls end&lt;begin gilt, es keinen Überlauf gibt und die Funktion einfach nichts tut, statt zu einem Absturz zu führen.</p>
<p>Gruß,<br />
SP</p>
</blockquote>
<p>So:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;time.h&gt;
using namespace std;

void bubbleSort(int* begin, int* end)
{
ptrdiff_t const length = end - begin; 
int i = 0;
for(ptrdiff_t g = 0; g &lt; length ; ++g)
{ 
	for(ptrdiff_t h = 0; h &lt; length-g ; ++h){

		if(begin[i+1] &lt; begin[i])// &lt;--- Diese Bedingung tritt nie ein
    	{
        ptrdiff_t tmp;
        tmp = begin[i+1];
        begin[i+1] = begin[i];
        begin[i] = tmp;
		}
        ++i;
	}
}
}

// UND

template&lt;size_t S, typename T&gt;
void bubbleSort( T ( &amp;a )[S] )
{

   bubbleSort(a,a+S);
}

int main()
{
    size_t S;
    time_t t;
    cin &gt;&gt; S;
    int* a = new int[S];
    srand(time(&amp;t));
    for(int f = 0; f &lt; S; ++f)
        a[f] = rand();
    bubbleSort(a, a+S);//geht
    for(int i = 0; i &lt; 18; ++i)
        cout &lt;&lt; a[i] &lt;&lt; endl;
    cin.sync();
    cin.get();
}
</code></pre>
<p>Sortiert aber immer noch nicht <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="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1765143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1765143</guid><dc:creator><![CDATA[skullyan]]></dc:creator><pubDate>Sun, 23 Aug 2009 12:54:57 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Sun, 23 Aug 2009 06:23:41 GMT]]></title><description><![CDATA[<p>Dranbleiben. Du kannst nicht wegen jeder Kleinigkeit sofort um Hilfe bitten. Wo bleibt denn da der Lerneffekt? Nimm 'nen Debugger...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1765146</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1765146</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Sun, 23 Aug 2009 06:23:41 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Sun, 23 Aug 2009 12:54:10 GMT]]></title><description><![CDATA[<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Dranbleiben. Du kannst nicht wegen jeder Kleinigkeit sofort um Hilfe bitten. Wo bleibt denn da der Lerneffekt? Nimm 'nen Debugger...</p>
</blockquote>
<p>Die dynamische Speicherverwaltung spielt mir wohl 'nen Streich. Ich komme nicht dahinter. Denn ich sehe nciht, wo da ein Fehler sein soll.</p>
<p>Muss aber einer sein. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1765293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1765293</guid><dc:creator><![CDATA[skullyan]]></dc:creator><pubDate>Sun, 23 Aug 2009 12:54:10 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Sun, 23 Aug 2009 13:12:30 GMT]]></title><description><![CDATA[<p>skullyan schrieb:</p>
<blockquote>
<p>Die dynamische Speicherverwaltung spielt mir wohl 'nen Streich. Ich komme nicht dahinter. Denn ich sehe nciht, wo da ein Fehler sein soll.</p>
<p>Muss aber einer sein. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
</blockquote>
<p>Hast du nicht gelesen? Du sollst es einmal mit einem Debugger versuchen. Wenn du noch nicht damit umgehen kannst, wird es Zeit, das zu lernen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1765303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1765303</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 23 Aug 2009 13:12:30 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Sun, 23 Aug 2009 13:50:17 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>skullyan schrieb:</p>
<blockquote>
<p>Die dynamische Speicherverwaltung spielt mir wohl 'nen Streich. Ich komme nicht dahinter. Denn ich sehe nciht, wo da ein Fehler sein soll.</p>
<p>Muss aber einer sein. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
</blockquote>
<p>Hast du nicht gelesen? Du sollst es einmal mit einem Debugger versuchen. Wenn du noch nicht damit umgehen kannst, wird es Zeit, das zu lernen.</p>
</blockquote>
<p>Habs versucht. Nicht geschafft. Debuggen kann ich schon, aber irgendwie reicht meine Erfahrung nicht aus, um dieses Problem zu lösen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1765316</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1765316</guid><dc:creator><![CDATA[skullyan]]></dc:creator><pubDate>Sun, 23 Aug 2009 13:50:17 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Sun, 23 Aug 2009 13:55:43 GMT]]></title><description><![CDATA[<p>Dann schau halt mal nach, wie andere Implementierungen aussehen.. Bubblesort gibts wie Sand am Meer. Dann kannst du vergleichen, was du anderst machst und du weisst dann auch, wo der Fehler ist..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1765320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1765320</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 23 Aug 2009 13:55:43 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Sun, 23 Aug 2009 13:57:20 GMT]]></title><description><![CDATA[<p>skullyan schrieb:</p>
<blockquote>
<p>Habs versucht. Nicht geschafft. Debuggen kann ich schon, aber irgendwie reicht meine Erfahrung nicht aus, um dieses Problem zu lösen.</p>
</blockquote>
<p>Wie hast Du es denn &quot;debugt&quot;? Was hast Du alles überprüft?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1765322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1765322</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Sun, 23 Aug 2009 13:57:20 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenzübergabe an Funktion[gelöst] on Sun, 23 Aug 2009 19:51:16 GMT]]></title><description><![CDATA[<p>Ähm, ich glaube, jetzt ist's gelöst:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;time.h&gt;
using namespace std;

void bubbleSort(int* begin, int* end)
{
ptrdiff_t const length = end - begin;
for(ptrdiff_t g = 1; g &lt; length ; ++g)
{
    for(ptrdiff_t h = 0; h &lt; length-g ; ++h){
        if(begin[h] &lt; begin[h+1])
        {
        int tmp = NULL;
        tmp = begin[h+1];
        begin[h+1] = begin[h];
        begin[h] = tmp;
        }
    }
}
}

// UND

template&lt;size_t S, typename T&gt;
void bubbleSort( T ( &amp;a )[S] )
{

   bubbleSort(a,a+S);
}

int main()
{
    size_t S;
    time_t t;
    cin &gt;&gt; S;
    int* a = new int[S];
    srand(time(&amp;t));
    for(int f = 0; f &lt; S; ++f)
        a[f] = rand();
    bubbleSort(a, a+S);//geht
    for(int i = 0; i &lt; S; ++i)
        cout &lt;&lt; a[i] &lt;&lt; endl;
    cin.sync();
    cin.get();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1765462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1765462</guid><dc:creator><![CDATA[skullyan]]></dc:creator><pubDate>Sun, 23 Aug 2009 19:51:16 GMT</pubDate></item></channel></rss>