<?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[Referenz auf Array fester Größe]]></title><description><![CDATA[<p>Hallo zusammen.</p>
<p>Ich habe ein relativ simples Problem, komme aber nach heftigen Rumprobieren und Googlen dennoch nicht auf die Lösung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>Und zwar möchte ich eine Variable definieren, die eine Referenz auf ein Array mit fester Größe ist, also sinngemäß &quot;typ[123]&amp; variable&quot;. An sich würde ja &quot;typ*&amp; variable&quot; funktionieren, aber ich hätte dennoch gerne die Dimension im Quellcode. Weiß irgendjemand, wie ich das schreiben muss bzw. ob das überhaupt möglich ist?</p>
<p>Grüße,<br />
Marc</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/149745/referenz-auf-array-fester-größe</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 09:42:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/149745.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 08 Jun 2006 21:55:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Referenz auf Array fester Größe on Thu, 08 Jun 2006 21:55:03 GMT]]></title><description><![CDATA[<p>Hallo zusammen.</p>
<p>Ich habe ein relativ simples Problem, komme aber nach heftigen Rumprobieren und Googlen dennoch nicht auf die Lösung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>Und zwar möchte ich eine Variable definieren, die eine Referenz auf ein Array mit fester Größe ist, also sinngemäß &quot;typ[123]&amp; variable&quot;. An sich würde ja &quot;typ*&amp; variable&quot; funktionieren, aber ich hätte dennoch gerne die Dimension im Quellcode. Weiß irgendjemand, wie ich das schreiben muss bzw. ob das überhaupt möglich ist?</p>
<p>Grüße,<br />
Marc</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074227</guid><dc:creator><![CDATA[Neku]]></dc:creator><pubDate>Thu, 08 Jun 2006 21:55:03 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf Array fester Größe on Thu, 08 Jun 2006 23:36:52 GMT]]></title><description><![CDATA[<p>Hoi, also...ich weiß nicht ganz was du damit bezwecken willst... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Erstmal:<br />
- Ein Array ist ein Zeiger auf den ersten Index...<br />
- Eine Referenz ein Verweis auf ein Objekt (...) im Speicher...</p>
<p>Also was willst du denn referenzieren...:</p>
<p>1. ein Objekt an einer bestimmt Stelle du durch das statische Array reserviert wurde<br />
oder<br />
2. den Zeiger der auf 'das Array' zeigt ?</p>
<p>zu 1.:<br />
------</p>
<pre><code class="language-cpp">int iArray[10];
iArray[0] = 50;
int &amp;iRef = iArray[0];
// -&gt; iRef referenziert '50'
</code></pre>
<p>zu 2.:<br />
------<br />
geht nicht... <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="😃"
    /> ...denn:<br />
Typ Bezug = Wert;<br />
Typ &amp;Referenz = Bezug;<br />
----------------------<br />
Wenn Typ int ist geht das... ist Typ jedoch ein Zeiger (auf Int)<br />
geht das nicht...da du dann eine Zeigervariable referenzieren würdest...:<br />
ALSO: Entweder Referenzen oder Zeiger...das schließt sich also aus! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074258</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074258</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Thu, 08 Jun 2006 23:36:52 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf Array fester Größe on Thu, 08 Jun 2006 23:42:14 GMT]]></title><description><![CDATA[<p>Man kann durchaus eine Referenz auf Zeiger machen, wie z.B.:</p>
<pre><code class="language-cpp">int array[10];
int*&amp; ref = array;
</code></pre>
<p>Nun möchte ich aber keine Referenz auf &quot;int*&quot;, sondern auf &quot;int[10]&quot; <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/1074259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074259</guid><dc:creator><![CDATA[Neku]]></dc:creator><pubDate>Thu, 08 Jun 2006 23:42:14 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf Array fester Größe on Fri, 09 Jun 2006 00:08:52 GMT]]></title><description><![CDATA[<p>alles kein problem, nur brauchen wir noch ein paar klammern, denn alles was postfix ist, also rechts vom namen steht, hat bekanntlich vorrang:</p>
<pre><code class="language-cpp">int array[10];
int (&amp;ref)[10] = array;
</code></pre>
<p>Neku schrieb:</p>
<blockquote>
<p>Man kann durchaus eine Referenz auf Zeiger machen, wie z.B.:</p>
<pre><code class="language-cpp">int array[10];
int*&amp; ref = array;
</code></pre>
<p>Nun möchte ich aber keine Referenz auf &quot;int*&quot;, sondern auf &quot;int[10]&quot; <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>
</blockquote>
<p>das sollte allerdings nicht funktionieren. da array kein zeiger ist, kann array logischerweise nicht als initialisierer einer referenz auf einen zeiger dienen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074261</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 09 Jun 2006 00:08:52 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf Array fester Größe on Fri, 09 Jun 2006 00:25:28 GMT]]></title><description><![CDATA[<p>Klar ist array ein Zeiger <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>Danke vielmals für den Hinweis mit den Klammern <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/1074262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074262</guid><dc:creator><![CDATA[Neku]]></dc:creator><pubDate>Fri, 09 Jun 2006 00:25:28 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf Array fester Größe on Fri, 09 Jun 2006 07:09:41 GMT]]></title><description><![CDATA[<p>Neku schrieb:</p>
<blockquote>
<p>Klar ist array ein Zeiger <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
</blockquote>
<p>Nein, array ist ein Array. Es darf nur im Kontext der Zeigerarithmetik als Zeiger verwendet werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074313</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 09 Jun 2006 07:09:41 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf Array fester Größe on Fri, 09 Jun 2006 07:43:54 GMT]]></title><description><![CDATA[<blockquote>
<p>Nun möchte ich aber keine Referenz auf &quot;int*&quot;, sondern auf &quot;int[10]&quot;</p>
</blockquote>
<p>Was haben wir denn alles ueber Array's gelernt ?</p>
<p>- Die variable &quot;eines Array's&quot; repraesentiert den zeiger aufs erste element.<br />
- Damit ist der Typ eines Arrays also Zeiger auf den ElementTyp.</p>
<p><div class="plugin-markdown"><input type="checkbox" id="checkbox125518" checked="true" /><label for="checkbox125518">als typ gibts ned ... damit gehen die Groesseninformationen laut standard soweiso verloren.</label></div><br />
Die groesse des Arrays wird beim definieren halt nur fuer den Stack zum aufrollen gegeben.</p>
<p>Preisfrage:<br />
void Testfunc(int ab[10]);<br />
wird der compiler meckern wenn ich dem nen int x[9] als parameter uebergebe ?</p>
<p>Was nen compiler mit ner referenz auf nen Array mit groessenangabe macht, ist sicher nicht definiert, die meisten machen aber nen doofen zeiger draus, also kannst die groesse an der stelle nie draus ermitteln.</p>
<p>Die einzige chance die hast um die Groesse (integer) in nen Typ zu bekommen, und damit volle typsicherheit zu erhalten, sind templates. Also nutze die doch dafuer ....</p>
<p>Was glaubst warum plain C Arrays in C++ so gehasst und geliebt werden ? ^^</p>
<p>Ciao ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074334</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Fri, 09 Jun 2006 07:43:54 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf Array fester Größe on Fri, 09 Jun 2006 09:11:23 GMT]]></title><description><![CDATA[<p>Der Typ ist bereits festgelegt auf wchar_t[256], da kann ich nichts machen. Ich hätte nur lieber eine Referenz mit der Größenangabe, sonst muss ich irgendwo in den Tiefen von mehreren hundert Quelldateien die Größenangabe in einem Kommentar verstecken <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /> Ist also nicht für den Compiler gedacht sondern für mich.</p>
<p>*edit*<br />
Noch interessanter wurde es, als ich mich mit den Casts rumprügeln musste, was noch immer nicht funktioniert:</p>
<pre><code class="language-cpp">wchar_t* (&amp;WideStringClass::m_FreeTempPtr)[256] = *(wchar_t*(*)[256])0x00809D40;
</code></pre>
<p>Nicht über den Sinn des ganzen nachdenken - ich hätte nur gerne eine Lösung, ob standardkonform oder nicht <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="😃"
    /><br />
Aktueller Fehler: &quot;error C2101: '&amp;' on constant&quot;</p>
<p>*edit2*<br />
Folgendes funktioniert übrigens:</p>
<pre><code class="language-cpp">uint32&amp; uVar = *(uint32*)0x012345678;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1074379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074379</guid><dc:creator><![CDATA[Neku]]></dc:creator><pubDate>Fri, 09 Jun 2006 09:11:23 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf Array fester Größe on Fri, 09 Jun 2006 09:16:38 GMT]]></title><description><![CDATA[<p>RHBaum schrieb:</p>
<blockquote>
<blockquote>
<p>Nun möchte ich aber keine Referenz auf &quot;int*&quot;, sondern auf &quot;int[10]&quot;</p>
</blockquote>
<p>Was haben wir denn alles ueber Array's gelernt ?</p>
<p>- Die variable &quot;eines Array's&quot; repraesentiert den zeiger aufs erste element.<br />
- Damit ist der Typ eines Arrays also Zeiger auf den ElementTyp.</p>
</blockquote>
<p>Hi, ich bastel Compiler und von daher kenne ich die Frage schon. Um den Compiler zu schreiben, brauchte ich zusätzlich auch eine Lösung <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>In der Tat ist die Frage in C nicht so einfach, wie sie im ersten Moment scheint.<br />
Obwohl ihr euch widersprecht, habt ihr nämlich beide Recht. <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>Willkommen im Chaos des Sprachedesigns. ^^</p>
<p>Was passiert hier?</p>
<pre><code class="language-cpp">int main(void)
{
  char a1[5] = &quot;12345&quot;;
  char a2[5] = &quot;67890&quot;;

  char * p1  = &quot;abcde&quot;;
  char * p2  = &quot;fghij&quot;;

  p1 = p2;
  a1 = a2;
}
</code></pre>
<p>Bei p1=p2 sind die Erwartungen klar, die Zeiger werden überschrieben. Bei a1=a2 würde ich eine bitweise Kopie erwarten, also das die 5 Bytes von a1 überschrieben werden.<br />
Bei a1=a2 meldet der GCC 4 einen Typfehler, obwohl beide Typen gleich definitiv sind. Würde ich die Arrays in ein struct setzen, wäre wieder alles easy.<br />
Die Arrays können also keine Zeiger sein. Ein Array ist also definitiv ein eigener Typ. Somit müsste eine Unterscheidung möglich sein und damit auch eine Referenz auf int [10].</p>
<p>Im Alltag ist C allerdings darauf ausgelegt, dass man diesen Unterschied nicht sieht. Der [] Operator macht nämlich bei Zeigern ohne Aufforderung eine Dereferenzierung (&quot;*&quot;) vor der der Addition(&quot;[]&quot;), bei lokalen Arrays auf dem Stack aber nicht (&quot;.[]&quot;). Und das kann man im Code nicht mehr unterscheiden, da man in beiden Fällen nur &quot;[]&quot; schreibt. Für eine korrekte Typbehandlung müsste aber eigentlich (*var)[] schreiben, was regelmäßig braucht, aber eben nicht so hübsch aussieht.</p>
<p>[] benötigt eine Position im Speicher, von der ausgehend man Addieren (&quot;[]&quot;) kann. Also muss ein Array einen Zeiger auf das erste Element haben, obwohl es selbst kein Zeiger ist.</p>
<p>Folgender Code lässt sich mit ältern Compilern fehlerfrei übersetzen. Ich habe es grade mit gcc 3.3 und gcc 4 probiert, beide akzeptieren ihn <strong>nicht</strong> mehr. Ich glaube der 2.95er nimmt ihn noch, habe aber keinen mehr hier.</p>
<pre><code class="language-cpp">int main(void)
{
  char Array[] = &quot;Hallo Welt&quot;;
  char * p1 = Array;
  char * p2 = &amp;Array;    // jetzt falsch (Typenfehler bei Zuweisung), früher identisch zu p2 = Array
}
</code></pre>
<p>Nach Ansicht moderner GNU Compiler, sind Arrays damit vom Typ her wohl Zeiger, den man nicht referenzieren kann, genauso wie man nicht &amp;(&amp;var) schreiben kann, weil &amp;var bereits ein temporärer Zeiger ist, der keine eigene Speicherposition hat, die man erfragen könnte. Aber das Array liegt doch auf dem Stack, ist vom Typ char[] (also ein Array) und von dem Stack müsste es doch eine Adresse geben.<br />
&amp;Array akzeptiert er auch, also lassen wir halt die Zuweisung mal weg:</p>
<pre><code class="language-cpp">int main(void)
{
  char Array[] = &quot;Hallo Welt&quot;;

  printf( &quot;%x - %x&quot;, (int) Array, (int) &amp;Array );

  return 0;
}
</code></pre>
<p>Und siehe da: gcc 3.3 und gcc 4.0 werfen hier den zweimal den gleichen Wert aus. So ein Zufall aber auch: ein Zeiger, der auf sich selber zeigt. Ein Perpetuum Mobile der Informatik. ^^</p>
<p>Das Problem entsteht durch eine syntaktische Ungenauigkeit des [] Operators, den man auf Arrays, wie auch auf Zeiger anwenden kann, obwohl ein Array vom Typ her eigentlich keine Referenz ist. Da ist ein feiner Unterschied! Denn ein Zeiger ist immer nur ein Zeiger auf ein (1.0) Datenelement, den man mit &quot;*&quot; dereferenziert. Kein Array, auf das man mit [] zugreift (und eben nicht dereferenziert). Wenn man das meint, müsste es eigentlich so aussehen:</p>
<pre><code class="language-cpp">int main(void)
{
  char *p[] = &quot;Array&quot;;

  (*p)[0] = &quot;B&quot;;
  return 0;
}
</code></pre>
<p>Zeiger auf ein char-Array (also nicht auf ein einzelnes char, dass man ja nicht wie ein Array durchfahren kann).</p>
<p>vgl. z.B. auch:</p>
<pre><code class="language-cpp">int main( int argc, char *argc[] );

vs.

int main( int argc, char **argc );
</code></pre>
<p>Mit der Gleichsetzung von &quot;<em>&quot; und &quot;[0]&quot;, bzw &quot;</em>&quot; und &quot;[]&quot; bei der Typdeklaration hat man sich die Unterscheidbarkeit in dieser Typen kaputt gemacht.<br />
Wenn Dein Typ grundsätzlich eine beliebige, aber feste Arraylänge hat, musst Du das Array in einem struct einbauen und so hast die gesuchte Typunterscheidung.</p>
<p>Viel Spaß noch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074386</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Fri, 09 Jun 2006 09:16:38 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf Array fester Größe on Fri, 09 Jun 2006 12:13:22 GMT]]></title><description><![CDATA[<p>es ist in c oder C++ unmöglich, arrays unbestimmter größe als parameter von funktionen zu verwenden. aus diesem einen grunde gibt es eine sonderregel (6.7.5.2/5 in C99 und -kann ich jetzt auf die schnelle für C++ nicht finden). die muss auch zwingend existieren, um diese deklaration zu erlauben, denn ein array unbekannter größe ist ein unvollständiger typ, und unvollständige typen können nunmal nicht für funktionsparameter verwendet werden. diese regel besagt, dass eine deklaration mit[] so behandelt werden soll, als ob sie mit * erfolgt wäre.</p>
<p>im gegensatz zu skalaren typen, sind arrays <em>stets</em> lvalues - und die übliche implizite wandlung in ein rvalue existiert nicht. es gibt allerdings eine implizite umwandlung in einen (rvalue) pointer auf das erste element.<br />
und das ist der witz daran:<br />
wenn der kontext ein rvalue verlangt, dann verhält sich ein array dort, als ob es ein pointer wäre (in diesem kontext kann man diese tatsächlich nicht unterscheiden). und (fast) alle oben genannten beispiele fallen eben in diese katageorie. das beweist aber nicht, das arrays pointer <em>sind</em>, nur das die auswahl der beispiele suboptimal ist.</p>
<p>es gibt nur wenige kontexte, die ein lvalue brauchen: das brot-und-butter beispiel zuweisung klappt nun leider gerade nicht, denn ich kann arrays nicht zuweisen (eben weil es nichts passendes für die rechte seite mangels rvalue arrays gibt)<br />
es verbleiben operatoren, die lvalues brauchen:<br />
&amp; (und wie dein beispiel richtig gezeigt hat: char * p2 = &amp;Array ist das ergebnis eben nicht ein pointer auf char sondern ein pointer auf ein array aus 11 chars).<br />
sizeof - der klassiker<br />
zusätzlich:<br />
initialisierung einer referenz, hier steht rechts vom = zeichen wieder ein lvalue</p>
<p>jetzt sollte klar sein, warum das</p>
<pre><code class="language-cpp">int array[10];
int*&amp; ref = array;
</code></pre>
<p>nicht geht. zwar kann array implizit in einen pointer auf das erste element, also einen pointer aiuf char gewandelt werden. das ergebnis ist aber ein rvalue, und kann folglich nicht zur initialisierung einer referenz auf (non-const) char verwendet werden.</p>
<p>edit: viele (bestimmt nicht alle) rechtsschreibfehler beseitigt - heute wieder besonders schlimm</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074560</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 09 Jun 2006 12:13:22 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf Array fester Größe on Fri, 09 Jun 2006 22:07:09 GMT]]></title><description><![CDATA[<p>Ich würde einigen Leuten hier raten, ihr Grundwissen nochmal zu überprüfen. Besonders die, die Sachen wie</p>
<blockquote>
<p>Ein Array ist ein Zeiger auf den ersten Index...</p>
</blockquote>
<blockquote>
<p><div class="plugin-markdown"><input type="checkbox" id="checkbox125519" checked="true" /><label for="checkbox125519">als typ gibts ned ... damit gehen die Groesseninformationen laut standard soweiso verloren.</label></div></p>
</blockquote>
<blockquote>
<p>Was nen compiler mit ner referenz auf nen Array mit groessenangabe macht, ist sicher nicht definiert, die meisten machen aber nen doofen zeiger draus, also kannst die groesse an der stelle nie draus ermitteln.</p>
</blockquote>
<p>schreiben. Dieses Halbwissen verwirrt Unwissende nur. Und noch schlimmer, auch diese verbreiten dieses Halbwissen dann wieder.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074855</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074855</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Fri, 09 Jun 2006 22:07:09 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf Array fester Größe on Sat, 10 Jun 2006 08:58:52 GMT]]></title><description><![CDATA[<p>Super, wenn ich mir das hier so ansehe, muss ich mich wohl nicht wundern dass alle paar Wochen jemand hier aufschlägt und verzweifelt versucht ein 2D-Array als Zeiger auf Zeiger zu übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074966</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Sat, 10 Jun 2006 08:58:52 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf Array fester Größe on Sat, 10 Jun 2006 12:55:28 GMT]]></title><description><![CDATA[<p>Schön, dass ihr euch so nett unterhaltet hier, aber an meinem Problem hat sich leider noch nichts geändert. (<a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1074379.html#1074379" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1074379.html#1074379</a>)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1075081</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1075081</guid><dc:creator><![CDATA[Neku]]></dc:creator><pubDate>Sat, 10 Jun 2006 12:55:28 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf Array fester Größe on Sat, 10 Jun 2006 13:05:45 GMT]]></title><description><![CDATA[<p>Neku schrieb:</p>
<blockquote>
<p>Schön, dass ihr euch so nett unterhaltet hier, aber an meinem Problem hat sich leider noch nichts geändert. (<a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1074379.html#1074379" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1074379.html#1074379</a>)</p>
</blockquote>
<p>Du könntest einen neuen Typ definieren, wie ich vorgeschlagen habe mit struct oder mit typedef, diesen Typ kannst Du gleichsetzen und auch Referenzen darauf bilden.</p>
<pre><code class="language-cpp">struct MyArray
{
  char_t Data[256];
};
</code></pre>
<p>Du könntest auch eine Schleife programmieren, die 256 Bytes kopiert.<br />
Du könntest mit memcopy 256 Bytes kopieren.</p>
<p>Du kannst <strong>nicht</strong> Arrays auf Arrays kopieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1075099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1075099</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Sat, 10 Jun 2006 13:05:45 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf Array fester Größe on Sat, 10 Jun 2006 13:08:21 GMT]]></title><description><![CDATA[<p>zeig doch mal die deklaration von WideStringClass::m_FreeTempPtr</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1075102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1075102</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 10 Jun 2006 13:08:21 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf Array fester Größe on Sat, 10 Jun 2006 13:26:51 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/11309">@Xin</a>: Ich möchte ja eine Referenz auf das Array, anstatt es zu kopieren - darum geht es ja <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><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>:</p>
<pre><code class="language-cpp">class WideStringClass
{

public:

	static wchar_t* (&amp;m_FreeTempPtr)[256];
	// ...

};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1075113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1075113</guid><dc:creator><![CDATA[Neku]]></dc:creator><pubDate>Sat, 10 Jun 2006 13:26:51 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf Array fester Größe on Sat, 10 Jun 2006 13:34:31 GMT]]></title><description><![CDATA[<p>Neku schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/11309">@Xin</a>: Ich möchte ja eine Referenz auf das Array, anstatt es zu kopieren - darum geht es ja <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>
</blockquote>
<p>Wo ist das Problem?</p>
<pre><code class="language-cpp">struct wchar_array256
{
  wchar_t Data[256];
};

class WideStringClass
{
public:
  static wchar_array256 * m_FreeTempPtr;
};
</code></pre>
<p>Das sollte Dein Problem doch typgerecht lösen, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1075119</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1075119</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Sat, 10 Jun 2006 13:34:31 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf Array fester Größe on Sat, 10 Jun 2006 13:39:45 GMT]]></title><description><![CDATA[<p>Dann kann ich leider m_FreeTempPtr nicht wie bisher verwenden, sondern muss überall m_FreeTempPtr.Data schreiben. Der Weg über ein Struct ist schließlich etwas zu umständlich. Wenn es nicht direkt über wchar_t*(&amp;)[256] geht, muss ich wieder zu wchar_t** zurückgehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1075123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1075123</guid><dc:creator><![CDATA[Neku]]></dc:creator><pubDate>Sat, 10 Jun 2006 13:39:45 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf Array fester Größe on Sat, 10 Jun 2006 13:48:27 GMT]]></title><description><![CDATA[<p>Neku schrieb:</p>
<blockquote>
<p>Dann kann ich leider m_FreeTempPtr nicht wie bisher verwenden, sondern muss überall m_FreeTempPtr.Data schreiben. Der Weg über ein Struct ist schließlich etwas zu umständlich. Wenn es nicht direkt über wchar_t*(&amp;)[256] geht, muss ich wieder zu wchar_t** zurückgehen.</p>
</blockquote>
<p>Immer diese Extrawünsche <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>
<pre><code class="language-cpp">class wchar_array256
{
  private:
    wchar_t Data[256];

  public:
    wchar_t &amp; operator [] (int index)
    {
      return Data[index];
    }
};

class WideStringClass
{
public:
  static wchar_array256 * m_FreeTempPtr;
};
</code></pre>
<p>Damit kannst Du jetzt auch WideStringClass::m_FreeTempPtr[ foobar ] schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1075128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1075128</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Sat, 10 Jun 2006 13:48:27 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf Array fester Größe on Sat, 10 Jun 2006 13:54:06 GMT]]></title><description><![CDATA[<p>Xin schrieb:</p>
<blockquote>
<p>Damit kannst Du jetzt auch WideStringClass::m_FreeTempPtr[ foobar ] schreiben.</p>
</blockquote>
<p>Ähh.. quatsch... der [] geht hier erstmal auf den Zeiger, nicht auf den Datentyp ^^</p>
<pre><code class="language-cpp">(*WideStringClass::m_FreeTempPtr)[ foobar ]
</code></pre>
<p>Mit 'ner Referenz sollte das aber auszubügeln sein, dann fehlt Dir allerdings die Möglichkeit &quot;NULL&quot; zuzuweisen, Du müsstest also eine<br />
wchar_array256::NULL Instanz haben, sofern Du sie brauchst.</p>
<pre><code class="language-cpp">class WideStringClass
{
public:
  static wchar_array256 &amp; m_FreeTempPtr;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1075132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1075132</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Sat, 10 Jun 2006 13:54:06 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf Array fester Größe on Sat, 10 Jun 2006 13:54:45 GMT]]></title><description><![CDATA[<p><div class="plugin-markdown"><input type="checkbox" id="checkbox125516" checked="true" /><label for="checkbox125516">schreiben <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="😉"
    /></label></div></p>
<p>EDIT:<br />
Zu lahm, hehe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1075133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1075133</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Sat, 10 Jun 2006 13:54:45 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf Array fester Größe on Sat, 10 Jun 2006 14:04:15 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">wchar_t* wString = this-&gt;m_freeTempPtr[x];
</code></pre>
<p>So soll das aussehen <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/1075135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1075135</guid><dc:creator><![CDATA[Neku]]></dc:creator><pubDate>Sat, 10 Jun 2006 14:04:15 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf Array fester Größe on Sat, 10 Jun 2006 14:17:10 GMT]]></title><description><![CDATA[<p>Neku schrieb:</p>
<blockquote>
<pre><code class="language-cpp">wchar_t* (&amp;WideStringClass::m_FreeTempPtr)[256] = *(wchar_t*(*)[256])0x00809D40;
</code></pre>
<p>Nicht über den Sinn des ganzen nachdenken - ich hätte nur gerne eine Lösung, ob standardkonform oder nicht <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="😃"
    /><br />
Aktueller Fehler: &quot;error C2101: '&amp;' on constant&quot;</p>
<p>*edit2*<br />
Folgendes funktioniert übrigens:</p>
<pre><code class="language-cpp">uint32&amp; uVar = *(uint32*)0x012345678;
</code></pre>
</blockquote>
<p>das scheint eine beschränkung des compilers zu sein. prionzipiell geht es ja um</p>
<pre><code class="language-cpp">T&amp; foo = *(T*)0x12345678;
</code></pre>
<p>für beliebiges skalares T scheint visual c++ das zu akzeptieren. sobald T allerdings ein array ist, erhalten wir den beschriebenen fehler - dabei ist anzumerken, das das problem auf der rechten seite ist. interessanterweise funktioniert das hier immer (und könnte als ausweg dienen):</p>
<pre><code class="language-cpp">T* const foo = (T*)0x12345678;
T&amp; bar = *foo;
</code></pre>
<p>da foo in jedem falle vor bar initialisiert wird, wäre das eine mögliche lösung. ich würde das problem nicht unbedingt als bug unsehen, da das ergebnis des casts, der hier benutzt wird, von vornherein implementationsabhängig ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1075143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1075143</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 10 Jun 2006 14:17:10 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz auf Array fester Größe on Sat, 10 Jun 2006 14:33:05 GMT]]></title><description><![CDATA[<p>Neku schrieb:</p>
<blockquote>
<pre><code class="language-cpp">wchar_t* wString = this-&gt;m_freeTempPtr[x];
</code></pre>
<p>So soll das aussehen <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>
</blockquote>
<p>Das solltest Du mit etwas Phantasie auch noch selber hinbekommen. :-\</p>
<p>[cpp]<br />
wchar_t * operator [] (int index)<br />
{<br />
return &amp;Data[index];<br />
}<br />
[cpp]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1075153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1075153</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Sat, 10 Jun 2006 14:33:05 GMT</pubDate></item></channel></rss>