<?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[zu blöd für Pointer ?]]></title><description><![CDATA[<p>Hi</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> Ich hab zur Zeit ein Brett vor dem Kopf: <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Deklariert in myprogdlg.h:</p>
<pre><code class="language-cpp">CString m_strtext[30000][4]; // Array 
CDlg_Dialog m_dlgDialog;  // Dialogfeld welches später modal aufgerufen wird
</code></pre>
<p>in dialogdlg.h</p>
<pre><code class="language-cpp">CString m_strdlgtext[30000][4];
</code></pre>
<p>Jetzt möchte ich das Array an das Array aus dem Dialog<br />
übergeben:</p>
<pre><code class="language-cpp">m_dlgDialog.m_strdlgtext = &amp;m_strtext;
</code></pre>
<p>bekomme aber den Fehler :<br />
error C2440: '=': 'CString (*_w64 )[30000][4]' kann nicht in 'CString[30000][4]' konvertiert werden</p>
<p>Ich steh jedesmal mit diesen Array-Pointern auf Kriegfuß.<br />
'jaja ich weiss , eigentlich ganz einfach' <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>Aber vielleicht kann mir ja jemand weiterhelfen ?</p>
<p>Danke im Voraus und Gruß<br />
Linus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/141748/zu-blöd-für-pointer</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Jul 2026 00:47:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/141748.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 24 Mar 2006 16:05:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to zu blöd für Pointer ? on Fri, 24 Mar 2006 16:05:41 GMT]]></title><description><![CDATA[<p>Hi</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> Ich hab zur Zeit ein Brett vor dem Kopf: <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Deklariert in myprogdlg.h:</p>
<pre><code class="language-cpp">CString m_strtext[30000][4]; // Array 
CDlg_Dialog m_dlgDialog;  // Dialogfeld welches später modal aufgerufen wird
</code></pre>
<p>in dialogdlg.h</p>
<pre><code class="language-cpp">CString m_strdlgtext[30000][4];
</code></pre>
<p>Jetzt möchte ich das Array an das Array aus dem Dialog<br />
übergeben:</p>
<pre><code class="language-cpp">m_dlgDialog.m_strdlgtext = &amp;m_strtext;
</code></pre>
<p>bekomme aber den Fehler :<br />
error C2440: '=': 'CString (*_w64 )[30000][4]' kann nicht in 'CString[30000][4]' konvertiert werden</p>
<p>Ich steh jedesmal mit diesen Array-Pointern auf Kriegfuß.<br />
'jaja ich weiss , eigentlich ganz einfach' <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>Aber vielleicht kann mir ja jemand weiterhelfen ?</p>
<p>Danke im Voraus und Gruß<br />
Linus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1023229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1023229</guid><dc:creator><![CDATA[linus]]></dc:creator><pubDate>Fri, 24 Mar 2006 16:05:41 GMT</pubDate></item><item><title><![CDATA[Reply to zu blöd für Pointer ? on Fri, 24 Mar 2006 16:26:40 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">m_dlgDialog.m_strdlgtext = m_strtext;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1023250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1023250</guid><dc:creator><![CDATA[CrazyHorse]]></dc:creator><pubDate>Fri, 24 Mar 2006 16:26:40 GMT</pubDate></item><item><title><![CDATA[Reply to zu blöd für Pointer ? on Fri, 24 Mar 2006 16:36:29 GMT]]></title><description><![CDATA[<p>habe ich zuerst auch gedacht dann kommt aber :</p>
<p>error C2106: '=' Linker Operand muss ein L-Wert sein <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="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1023262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1023262</guid><dc:creator><![CDATA[linus]]></dc:creator><pubDate>Fri, 24 Mar 2006 16:36:29 GMT</pubDate></item><item><title><![CDATA[Reply to zu blöd für Pointer ? on Fri, 24 Mar 2006 19:27:54 GMT]]></title><description><![CDATA[<p>O.k., zuerst müßte man wissen, was Du genau machen willst: Willst Du das Stringfeld direkt kopieren, so daß m_strdlgtext sämtliche Werte noch einmal beinhaltet, welche Du dann unabhängig von m_strtext behandeln kannst? Ein analoges Simpelbeispiel wäre dann das hier:</p>
<pre><code class="language-cpp">int a=5;
int b=a;
</code></pre>
<p>Oder willst Du m_strdlgtext als Zeiger (Pointer) auf m_strtext zeigen lassen, so daß die Daten letztendlich nur einmal vorhanden sind, aber von zwei Variablen aus bearbeitet werden können? So wie in:</p>
<pre><code class="language-cpp">int a=5;
int *b=&amp;a;
</code></pre>
<p>Wenn Du ersteres machen willst (Kopie), dann geht das ganz einfach. Felder lassen sich auf diese Weise nicht kopieren, also mußt Du jedes Element einzeln übertragen:</p>
<pre><code class="language-cpp">for (int i=0; i&lt;30000; i++)
    for (int k=0; k&lt;4; k++)
        m_dlgDialog.m_strdlgtext [i] [k]=m_strtext [i] [k];
</code></pre>
<p>Willst Du allerdings zweiteres (Zeiger zeigt auf Feld) machen, dann ist das Problem folgendes: Wenn Du</p>
<pre><code class="language-cpp">CString m_strdlgtext[30000][4];
</code></pre>
<p>deklarierst, dann reserviert das Programm bereits Speicher für den Inhalt des Feldes. Dann kannst Du den Variablennamen nicht mehr zeigermäßig auf ein anderes Feld zeigen lassen. Also</p>
<pre><code class="language-cpp">int b [10];
</code></pre>
<p>ist nicht das gleiche wie</p>
<pre><code class="language-cpp">int *b;
</code></pre>
<p>Das heißt: Sowas hier funktioniert zwar:</p>
<pre><code class="language-cpp">int a [10];
int *b=&amp;a;
</code></pre>
<p>aber sowas nicht:</p>
<pre><code class="language-cpp">int a [10];
int b [10]=&amp;a;
</code></pre>
<p>Die Lösung lautet in dem Fall also folgendermaßen: Du mußt m_strdlgtext als Zeiger deklarieren:</p>
<pre><code class="language-cpp">CString *m_strdlgtext;
</code></pre>
<p>und dann kannst Du schreiben</p>
<pre><code class="language-cpp">m_dlgDialog.m_strdlgtext=&amp;m_strtext;
</code></pre>
<p>Ich hoffe, ich konnte Dir helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1023362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1023362</guid><dc:creator><![CDATA[NES-Spieler]]></dc:creator><pubDate>Fri, 24 Mar 2006 19:27:54 GMT</pubDate></item><item><title><![CDATA[Reply to zu blöd für Pointer ? on Fri, 24 Mar 2006 21:30:29 GMT]]></title><description><![CDATA[<p>NES-Spieler schrieb:</p>
<blockquote>
<p>Die Lösung lautet in dem Fall also folgendermaßen: Du mußt m_strdlgtext als Zeiger deklarieren:</p>
<pre><code class="language-cpp">CString *m_strdlgtext;
</code></pre>
<p>und dann kannst Du schreiben</p>
<pre><code class="language-cpp">m_dlgDialog.m_strdlgtext=&amp;m_strtext;
</code></pre>
<p>Ich hoffe, ich konnte Dir helfen.</p>
</blockquote>
<p>Du hast recht aber es tut mir leid , habe ich auch ausprobiert , geht aber<br />
glaube ich nur mit eindimensionalen arrays</p>
<p>So muss ja auch bei der übergabe eines zweidimensionalen Arrays<br />
an eine Funktion immer der zweite Wert mit übergeben bzw deklariert werden<br />
(wenn ich mich richtig erinnere, ist schon so lange her)</p>
<p>in diesem fall kommt aber der fehler:<br />
error C2440: '=': 'CString (*_w64 )[30000][4]' kann nicht in 'CString*' konvertiert werden</p>
<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="😞"
    /> driving mad</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1023429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1023429</guid><dc:creator><![CDATA[linus]]></dc:creator><pubDate>Fri, 24 Mar 2006 21:30:29 GMT</pubDate></item><item><title><![CDATA[Reply to zu blöd für Pointer ? on Fri, 24 Mar 2006 23:52:05 GMT]]></title><description><![CDATA[<p>Alles ohne Gewähr:</p>
<p>Aber war es bei solchen Arrays nicht der Fall, dass wenn man einen Zeiger auf so ein Array übergibt, es der Zeiger des ersten Objekt ist. Also z.b. bei einem eindimensionalen Array:</p>
<pre><code class="language-cpp">CString Str[30000];
CString* pStr;

pStr = &amp;Str;
// Ist das gleiche wie:
pStr = &amp;Str[0];
</code></pre>
<p>Anderst gesagt wäre es in einem zwei dimensionale Array:</p>
<pre><code class="language-cpp">CString Str[30000][4];
CString* pStr;

pStr = &amp;Str[0][0];
</code></pre>
<p>Kann sein, dass ich gerade völligen Scheiss erzähle, ist schon etwas länger her, dass ich diese Sorte von Arrays verwendet habe. Die sind mir einfach immer zu statisch, deshalb brauche ich meistens CArray oder sowas ...<br />
Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1023484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1023484</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 24 Mar 2006 23:52:05 GMT</pubDate></item><item><title><![CDATA[Reply to zu blöd für Pointer ? on Sat, 25 Mar 2006 10:49:10 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Anderst gesagt wäre es in einem zwei dimensionale Array:</p>
<pre><code class="language-cpp">CString Str[30000][4];
CString* pStr;

pStr = &amp;Str[0][0];
</code></pre>
</blockquote>
<p>Dann kann ich aber pStr[i][j] nicht referenzieren ,</p>
<p><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="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1023599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1023599</guid><dc:creator><![CDATA[linus]]></dc:creator><pubDate>Sat, 25 Mar 2006 10:49:10 GMT</pubDate></item><item><title><![CDATA[Reply to zu blöd für Pointer ? on Sat, 25 Mar 2006 14:23:31 GMT]]></title><description><![CDATA[<p>Du brauchst einen Pointer auf ein entsprechend großes CString-Array (also CString* m_str[30000][4]=&amp;str;). Alternativ müsstest du alle Elemente des gegebenen Arrays einzeln kopieren</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1023725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1023725</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 25 Mar 2006 14:23:31 GMT</pubDate></item><item><title><![CDATA[Reply to zu blöd für Pointer ? on Sat, 25 Mar 2006 16:50:37 GMT]]></title><description><![CDATA[<p>An linus:</p>
<p>Zuerst einmal möchte ich mich korrigieren: Meine beiden Codezeilen</p>
<pre><code class="language-cpp">CString *m_strdlgtext;
m_dlgDialog.m_strdlgtext=&amp;m_strtext;
</code></pre>
<p>müßten eigentlich so lauten:</p>
<pre><code class="language-cpp">CString *m_strdlgtext;
m_dlgDialog.m_strdlgtext=m_strtext;
</code></pre>
<p>weil ja m_strtext (ohne Indexangabe) auch schon ein Zeiger ist.</p>
<p>Daß das mit zweidimensionalen Feldern nicht klappt, hab ich auch erst heute rausgefunden. Ich weiß da leider keine Lösung, außer daß Du aus dem zweidimensionalen vielleicht ein eindimensionales Feld machst.</p>
<p>An Dravere:</p>
<blockquote>
<p>Aber war es bei solchen Arrays nicht der Fall, dass wenn man einen Zeiger auf so ein Array übergibt, es der Zeiger des ersten Objekt ist.</p>
</blockquote>
<p>Ganz genau. Der Feldname ohne Indexangabe ist eigentlich nichts weiter als ein Zeiger auf das erste Element. Dein Code hat allerdings noch einen kleinen Fehler. Er müßte so lauten:</p>
<pre><code class="language-cpp">CString Str[30000]; 
CString* pStr; 
pStr = Str; //Hier keine Adresszuweisung. (Das ist der gleiche Fehler, den ich in meinem ersten Post gemacht habe.)
// Ist das gleiche wie: 
pStr = &amp;Str[0];
</code></pre>
<p>Die Kurzfassung lautet also:</p>
<pre><code class="language-cpp">feld==&amp;feld [0]
</code></pre>
<p>Leider funktioniert das aus irgendeinem Grund nicht mit zweidimensionalen Feldern.</p>
<p>Man kann übrigens mit einem Zeiger wie in einem Feld arbeiten, selbst wenn der Zeiger gar nicht auf ein Feld zeigt.</p>
<pre><code class="language-cpp">int a=5;
int *b=&amp;a;
cout&lt;&lt;b [7];
</code></pre>
<p>gibt keinen Kompilierfehler, nur ein etwas merkwürdiges Ergebnis.</p>
<p>An CStoll:</p>
<blockquote>
<p>Du brauchst einen Pointer auf ein entsprechend großes CString-Array (also CString* m_str[30000][4]=&amp;str;). Alternativ müsstest du alle Elemente des gegebenen Arrays einzeln kopieren</p>
</blockquote>
<p>Wenn es ums Kopieren geht, dann ist es ja klar: Man erstellt das zweite (noch leere) Feld und kopiert per Wiederholung mit Zähler alles rein. Aber wenn es nur um Referenz geht, funktioniert Deine Version (Zeiger auf ein entsprechendes Feld) leider nicht (was ja auch verständlich ist, die Variable speichert ohnehin nur die Anfangsadresse und da ist es völlig egal, ob man in der Zeigerdeklaration noch hinterschreibt, wieviele Einträge das Quellfeld hat).</p>
<p>Zum Abschluß noch die Erklärung, warum man zwar einen fremden Zeiger auf ein eindimensionales Feld referenzieren lassen kann, das aber bei einem zweidimensionalen nicht klappt (falls es jemanden interessiert):<br />
Wenn ich in einem eindimensionalen Feld den Index angebe, braucht das Programm ab der Anfangsadresse nur soundsoviel Schritte nach vorne zu laufen. Der Zeiger muß den Inhalt und die Größe des Feldes nicht kennen, um das zu realisieren.</p>
<pre><code>|
XXXXXXXXXX
</code></pre>
<p>Bei Feld [3] geht er also einfach drei Schritte nach vorn:</p>
<pre><code>|
XXXXXXXXXX
</code></pre>
<p>Aber bei einem zweidimensionalen Feld ist das schon schwieriger:</p>
<pre><code>XXXXXX
XXXXXX
XXXXXX
</code></pre>
<p>ist ja im Speicher auch nur in der Form</p>
<pre><code>XXXXXXXXXXXXXXXXXX
</code></pre>
<p>abgespeichert. Wenn ich jetzt Feld [2] [1] sage, tja, wie weit soll er gehen? Er müßte die ersten zwei Zeilen überspringen und in der dritten einen Schritt nach vorne gehen. Aber er weiß nicht, wo eine Zeile aufhört und die nächste anfängt. Das vorliegende Feld [6] [3] könnte genausogut [9] [2] lauten. Also kann man einen simplen Zeiger nicht auf ein externes zweidimensionales Feld zeigen lassen. (Und deshalb muß man bei Funktionsparametern solcher Art auch mindestens einen der Indizes angeben, damit sich das Programm beim Zugriff zurechtfindet.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1023816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1023816</guid><dc:creator><![CDATA[NES-Spieler]]></dc:creator><pubDate>Sat, 25 Mar 2006 16:50:37 GMT</pubDate></item><item><title><![CDATA[Reply to zu blöd für Pointer ? on Mon, 27 Mar 2006 06:05:15 GMT]]></title><description><![CDATA[<p>Bei zweidimensionalen Feldern funktioniert es genauso wie mit eindimesionalen - nur daß die Umwandlung Array=Pointer nur in der äußersten Dimension klappt. Das heißt, du kannst dein 2D Array nur in einen &quot;Pointer auf Array&quot; übergeben:</p>
<pre><code class="language-cpp">CString str[3000][4];
CString* pstr[4];//Pointer auf 4er Array(s)

pstr = str;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1024522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1024522</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 27 Mar 2006 06:05:15 GMT</pubDate></item><item><title><![CDATA[Reply to zu blöd für Pointer ? on Mon, 27 Mar 2006 10:03:18 GMT]]></title><description><![CDATA[<p>An CStoll:<br />
Und ich sage Dir, so funktioniert es nicht. Das gibt einen Fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1024654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1024654</guid><dc:creator><![CDATA[NES-Spieler]]></dc:creator><pubDate>Mon, 27 Mar 2006 10:03:18 GMT</pubDate></item><item><title><![CDATA[Reply to zu blöd für Pointer ? on Tue, 28 Mar 2006 09:46:32 GMT]]></title><description><![CDATA[<p>O.k., ich hab die Lösung. Wenn Du ein Feld</p>
<pre><code class="language-cpp">CString m_strtext[30000][4];
</code></pre>
<p>hast und auf dieses mit Hilfe eines Zeigers zugreifen willst (also ohne es zu kopieren), dann machst Du das so:</p>
<pre><code class="language-cpp">CString (*m_strdlgtext) [4];
m_dlgDialog.m_strdlgtext=m_strtext;
</code></pre>
<p>Und zugreifen tust Du auf die einzelnen Einträge wie mit der ursprünglichen Variable:</p>
<pre><code class="language-cpp">m_strtext[534][2]
//liefert genauso den entsprechenden Wert, wie
m_strdlgtext[534][2]
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1025366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1025366</guid><dc:creator><![CDATA[NES-Spieler]]></dc:creator><pubDate>Tue, 28 Mar 2006 09:46:32 GMT</pubDate></item></channel></rss>