<?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[Arbeit mit Pointern]]></title><description><![CDATA[<p>ich verfüge über folgende struktur.</p>
<pre><code class="language-cpp">struct Tneuron // Kohonenschicht 
{
  float* weights;  // weights of the neuron
  float dist;
  short classtag;
  short wins;
};
</code></pre>
<p>damit entsprechende malloc</p>
<pre><code class="language-cpp">kohonen=(Tneuron*)malloc(neuronnumber*sizeof(Tneuron));
for (int a=0;a&lt;neuronnumber;a++) {
  kohonen[a].weights=(float*)malloc(vectorlength*sizeof(float));
</code></pre>
<p>ein element aus diesem array übergebe ich an eine funktion in der ich<br />
die variablen ändere mit diesem aufruf z.b.</p>
<pre><code class="language-cpp">ModifyNeuron(kohonen[0]);
</code></pre>
<p>die funktion ist:</p>
<pre><code class="language-cpp">void ModifyNeuron(Tneuron kohonen)
{
  for (int a=0;a&lt;10;a++) {
    kohonen.weights[a]=kohonen.weights[a]+10);
  }
  kohonen.wins++;
}
</code></pre>
<p>Das Problem ist:</p>
<p>Vergleiche ich die daten vor und nach dem aufruf der funktion, stelle ich fest, dass die kohonen.weights alle ordnungsgemäß verändert werden, und die kohonen.wins aber eben nicht!!</p>
<p>woran kann das liegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/148869/arbeit-mit-pointern</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 02:32:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/148869.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 31 May 2006 10:50:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Arbeit mit Pointern on Wed, 31 May 2006 10:50:04 GMT]]></title><description><![CDATA[<p>ich verfüge über folgende struktur.</p>
<pre><code class="language-cpp">struct Tneuron // Kohonenschicht 
{
  float* weights;  // weights of the neuron
  float dist;
  short classtag;
  short wins;
};
</code></pre>
<p>damit entsprechende malloc</p>
<pre><code class="language-cpp">kohonen=(Tneuron*)malloc(neuronnumber*sizeof(Tneuron));
for (int a=0;a&lt;neuronnumber;a++) {
  kohonen[a].weights=(float*)malloc(vectorlength*sizeof(float));
</code></pre>
<p>ein element aus diesem array übergebe ich an eine funktion in der ich<br />
die variablen ändere mit diesem aufruf z.b.</p>
<pre><code class="language-cpp">ModifyNeuron(kohonen[0]);
</code></pre>
<p>die funktion ist:</p>
<pre><code class="language-cpp">void ModifyNeuron(Tneuron kohonen)
{
  for (int a=0;a&lt;10;a++) {
    kohonen.weights[a]=kohonen.weights[a]+10);
  }
  kohonen.wins++;
}
</code></pre>
<p>Das Problem ist:</p>
<p>Vergleiche ich die daten vor und nach dem aufruf der funktion, stelle ich fest, dass die kohonen.weights alle ordnungsgemäß verändert werden, und die kohonen.wins aber eben nicht!!</p>
<p>woran kann das liegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1068663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1068663</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Wed, 31 May 2006 10:50:04 GMT</pubDate></item><item><title><![CDATA[Reply to Arbeit mit Pointern on Wed, 31 May 2006 10:55:57 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Du modifizierst den Speicher auf den weights zeigt, aber wins wird nur in der lokalen Kopie geändert.<br />
Daher solltest du eine Referenz oder einen Zeiger an die Funktion übergeben.</p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1068668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1068668</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Wed, 31 May 2006 10:55:57 GMT</pubDate></item><item><title><![CDATA[Reply to Arbeit mit Pointern on Wed, 31 May 2006 10:57:40 GMT]]></title><description><![CDATA[<p>das ist c, und nicht c++</p>
<p>wins werden gleaub ich mit einem zufallswert initialisiert, somal du sie nciht initialisiert hast!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1068671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1068671</guid><dc:creator><![CDATA[ser1al]]></dc:creator><pubDate>Wed, 31 May 2006 10:57:40 GMT</pubDate></item><item><title><![CDATA[Reply to Arbeit mit Pointern on Wed, 31 May 2006 10:58:05 GMT]]></title><description><![CDATA[<p>It0101 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void ModifyNeuron(Tneuron kohonen)
[...]
</code></pre>
<p>Vergleiche ich die daten vor und nach dem aufruf der funktion, stelle ich fest, dass die kohonen.weights alle ordnungsgemäß verändert werden, und die kohonen.wins aber eben nicht!!</p>
</blockquote>
<p>Das liegt daran, dass du der Funktion ModifyNeuron eine Kopie eines Objektes übergibst (=&gt; Call-by-Value), d.h. du kannst das Original nicht verändern. Die weights ändern sich trotzdem, weil es sich um eine flache Kopie handelt, d.h. es wird zwar der weights-Zeiger kopiert, aber er zeigt auf das gleiche wie im Original.</p>
<p>Lösung: Call-by-Reference:</p>
<pre><code class="language-cpp">void ModifyNeuron(Tneuron&amp; kohonen) { ...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1068672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1068672</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 31 May 2006 10:58:05 GMT</pubDate></item><item><title><![CDATA[Reply to Arbeit mit Pointern on Wed, 31 May 2006 10:59:27 GMT]]></title><description><![CDATA[<p>ser1al schrieb:</p>
<blockquote>
<p>das ist c, und nicht c++</p>
</blockquote>
<p>Falsch, es ist C, und es ist C++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1068675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1068675</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 31 May 2006 10:59:27 GMT</pubDate></item><item><title><![CDATA[Reply to Arbeit mit Pointern on Wed, 31 May 2006 10:59:55 GMT]]></title><description><![CDATA[<p>Ich war eben schon so verzweifelt dass ich kurz davor stand , dass ganze array global zu machen, um mir die parameterübergabe zu ersparen, aber ich wollts doch gern ordentlich machen und auf globale variablen verzichten <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/1068676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1068676</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Wed, 31 May 2006 10:59:55 GMT</pubDate></item><item><title><![CDATA[Reply to Arbeit mit Pointern on Wed, 31 May 2006 11:01:09 GMT]]></title><description><![CDATA[<p>Dann passt eine Referenz doch ganz gut...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1068677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1068677</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Wed, 31 May 2006 11:01:09 GMT</pubDate></item><item><title><![CDATA[Reply to Arbeit mit Pointern on Wed, 31 May 2006 11:01:12 GMT]]></title><description><![CDATA[<p>ok ich werds mit der referenz versuchen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1068678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1068678</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Wed, 31 May 2006 11:01:12 GMT</pubDate></item><item><title><![CDATA[Reply to Arbeit mit Pointern on Fri, 02 Jun 2006 10:53:40 GMT]]></title><description><![CDATA[<p>ok nächste problem, habe jetzt das ganze programm komplett auf ANSI C umgestellt, nun bemängelt der compiler aber die referenz &amp; und quittiert das mit</p>
<p>... main.c syntax error before '&amp;' token</p>
<p>gibts in ANSI C keine referenzen?</p>
<p>PS: sry 4 AnsiC frage, wollte nich extra nen neuen thread machen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1070007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1070007</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Fri, 02 Jun 2006 10:53:40 GMT</pubDate></item><item><title><![CDATA[Reply to Arbeit mit Pointern on Fri, 02 Jun 2006 10:54:39 GMT]]></title><description><![CDATA[<p>Nein, die sind eine neue Erfindung in C++ (in C mußt du Pointer verwenden und von Hand dereferenzieren).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1070008</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1070008</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 02 Jun 2006 10:54:39 GMT</pubDate></item><item><title><![CDATA[Reply to Arbeit mit Pointern on Fri, 02 Jun 2006 11:00:52 GMT]]></title><description><![CDATA[<p>diese funktion</p>
<pre><code class="language-cpp">void ModifyNeuron(Tneuron&amp; kohonen) { ...
</code></pre>
<p>[/quote]</p>
<p>müsste dann so aussehen?</p>
<pre><code class="language-cpp">void ModifyNeuron(Tneuron* kohonen) { ...
</code></pre>
<p>[/quote]</p>
<p>oder nicht?<br />
ich bin da im moment etwas ratlos, weil ich eigentlich bisher noch nicht das vergnügen mit ANSI C hatte...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1070013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1070013</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Fri, 02 Jun 2006 11:00:52 GMT</pubDate></item><item><title><![CDATA[Reply to Arbeit mit Pointern on Fri, 02 Jun 2006 11:03:18 GMT]]></title><description><![CDATA[<p>Richtig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1070017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1070017</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 02 Jun 2006 11:03:18 GMT</pubDate></item><item><title><![CDATA[Reply to Arbeit mit Pointern on Fri, 02 Jun 2006 11:16:44 GMT]]></title><description><![CDATA[<p>ok, ich hab jetzt bei allen zugriffe auf das element die alte variante</p>
<pre><code class="language-cpp">kohonen.wins
</code></pre>
<p>entfernt und durch</p>
<pre><code class="language-cpp">kohonen-&gt;wins
</code></pre>
<p>ersetzt, weil mir sonst der compiler die hucke voll gehauen hätte <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>
<p>nun krieg ich aber nen problem mit dem aufruf der funktion</p>
<pre><code class="language-cpp">ModifyNeuron(kohonen[0]);
</code></pre>
<p>der lautet folgendermaßen:</p>
<p>main.c incompatible type for argument 1 of `ModifyNeuron'</p>
<p>ich vermute er sucht hier nach mehreren objekten und bekommt von mir natürlich nur eines....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1070028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1070028</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Fri, 02 Jun 2006 11:16:44 GMT</pubDate></item><item><title><![CDATA[Reply to Arbeit mit Pointern on Fri, 02 Jun 2006 11:20:51 GMT]]></title><description><![CDATA[<p>Nein, für die Übergabe als Pointer mußt du die Adresse des Ziels weitergeben:</p>
<pre><code class="language-cpp">ModifyNeuron(&amp;kohonen[0]);
//oder
ModifiyNeuron(kohonen);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1070033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1070033</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 02 Jun 2006 11:20:51 GMT</pubDate></item><item><title><![CDATA[Reply to Arbeit mit Pointern on Fri, 02 Jun 2006 11:25:04 GMT]]></title><description><![CDATA[<p>ahja ok danke euch, jetzt funzt es <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/1070034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1070034</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Fri, 02 Jun 2006 11:25:04 GMT</pubDate></item></channel></rss>