<?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[Welcher Datentyp für Indizes?]]></title><description><![CDATA[<p>Hallo ihr,</p>
<p>auch wenn es ein bisschen eine philosophische Frage ist, so ist es doch etwas, worüber ich mir Gedanken mache, daher würde ich gerne einmal eure Meinungen dazu hören... Es geht eigentlich um etwas total Banales:</p>
<pre><code class="language-cpp">double vec[42];

// Variante 1
for (int i = 0; i &lt; 42; i++)
    vec[i] *= 3.14;

// Variante 2
for (unsigned int i = 0; i &lt; 42; i++)
    vec[i] *= 3.14;

// Variante 3
for (std::size_t i = 0; i &lt; 42; i++)
    vec[i] *= 3.14;
</code></pre>
<p>Welche Variante benutzt ihr? Macht ihr es davon abhängig, ob <code>vec</code> ein Array aus Bytes ist oder aus anderen Objekten/Datentypen? Mich interessiert vor allem die Betrachtung des Arrays als ein mathematischer Vektor (daher hier im Beipiel auch <code>double</code> ). Ich persönlich finde die Varianten 2 und 3 &quot;korrekter&quot;, da Array-Indizes nunmal nicht negativ sein können, aber dafür sind sie im Quellcode auch unübersichtlicher als die Variante 1. Meine Fragestellung bezieht sich natürlich nicht nur auf <code>for</code> -Schleifen, sondern es könnte auch sein, dass eine Indexvariable irgendwo deklariert wird und dann im Laufe des Programms ihr Wert berechnet wird...</p>
<p>Wem die Diskussion zu kleinlich ist, bitte raushalten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /><br />
Auf die Meinung aller anderen bin ich sehr gespannt. <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>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/241960/welcher-datentyp-für-indizes</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 05:06:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/241960.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 28 May 2009 07:26:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Welcher Datentyp für Indizes? on Thu, 28 May 2009 07:26:55 GMT]]></title><description><![CDATA[<p>Hallo ihr,</p>
<p>auch wenn es ein bisschen eine philosophische Frage ist, so ist es doch etwas, worüber ich mir Gedanken mache, daher würde ich gerne einmal eure Meinungen dazu hören... Es geht eigentlich um etwas total Banales:</p>
<pre><code class="language-cpp">double vec[42];

// Variante 1
for (int i = 0; i &lt; 42; i++)
    vec[i] *= 3.14;

// Variante 2
for (unsigned int i = 0; i &lt; 42; i++)
    vec[i] *= 3.14;

// Variante 3
for (std::size_t i = 0; i &lt; 42; i++)
    vec[i] *= 3.14;
</code></pre>
<p>Welche Variante benutzt ihr? Macht ihr es davon abhängig, ob <code>vec</code> ein Array aus Bytes ist oder aus anderen Objekten/Datentypen? Mich interessiert vor allem die Betrachtung des Arrays als ein mathematischer Vektor (daher hier im Beipiel auch <code>double</code> ). Ich persönlich finde die Varianten 2 und 3 &quot;korrekter&quot;, da Array-Indizes nunmal nicht negativ sein können, aber dafür sind sie im Quellcode auch unübersichtlicher als die Variante 1. Meine Fragestellung bezieht sich natürlich nicht nur auf <code>for</code> -Schleifen, sondern es könnte auch sein, dass eine Indexvariable irgendwo deklariert wird und dann im Laufe des Programms ihr Wert berechnet wird...</p>
<p>Wem die Diskussion zu kleinlich ist, bitte raushalten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /><br />
Auf die Meinung aller anderen bin ich sehr gespannt. <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>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717036</guid><dc:creator><![CDATA[Bloops]]></dc:creator><pubDate>Thu, 28 May 2009 07:26:55 GMT</pubDate></item><item><title><![CDATA[Reply to Welcher Datentyp für Indizes? on Thu, 28 May 2009 08:14:27 GMT]]></title><description><![CDATA[<p>genaugenommen eigentlich std::ptrdiff_t, da</p>
\quad\, \tt{vec}\[i\] = *(\tt{vec} + i) \\  
\Rightarrow \tt{\&vec}\[i\] = \tt{vec} + i \\  
\Rightarrow i = \tt{\&vec}\[i\] - \tt{vec}
<p>Syntaktisch sind auch negative Werte als Array-Indizes erlaubt:</p>
<pre><code class="language-cpp">double darr[7];
double* mid = darr+3;

for (std::ptrdiff_t index = -3; index &lt;= +3; ++index)
{
  std::cout &lt;&lt; mid[index] &lt;&lt; std::endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1717060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717060</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 28 May 2009 08:14:27 GMT</pubDate></item><item><title><![CDATA[Reply to Welcher Datentyp für Indizes? on Thu, 28 May 2009 15:13:25 GMT]]></title><description><![CDATA[<p>Da der Wert im Beispiel des OP von 0 bis 41 läuft ist hier IMO ganz klar size_t angebracht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717366</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 28 May 2009 15:13:25 GMT</pubDate></item><item><title><![CDATA[Reply to Welcher Datentyp für Indizes? on Thu, 28 May 2009 16:03:53 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Da der Wert im Beispiel des OP von 0 bis 41 läuft ist hier IMO ganz klar size_t angebracht.</p>
</blockquote>
<p>Da das Beispiel des OP eben nur ein Beispiel war und er die Frage als rein philosophisches Thema bezüglich Arrays im Allgemeinen in den Raum geworfen hat habe ich einen entsprechenden allgemeinen Typen angegeben - der auch 0-41 abdeckt <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/1717394</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717394</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 28 May 2009 16:03:53 GMT</pubDate></item><item><title><![CDATA[Reply to Welcher Datentyp für Indizes? on Thu, 28 May 2009 21:20:29 GMT]]></title><description><![CDATA[<p>Das wird ja sogar noch philosophischer als ich gedacht hatte <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>auf <code>std::ptrdiff_t</code> kam ich gar nicht, da ich Indizes noch nie in einem Kontext benutzt habe, in dem sie negativ geworden wären...</p>
<p>Also sehe ich das richtig, dass ihr es auch bevorzugt z. B. <code>std::size_t</code> zu nehmen, auch wenns dann in mathematisch komplexen Ausdrücken tendenziell ein bisschen unübersichtlicher wird? (Ein <code>int</code> ist halt doch irgendwie rein optisch auf den ersten Blick deutlich als Datentyp zu erkennen (und wenn's nur an dem Syntaxhighlighting liegt, das bei <code>size_t</code> &quot;fehlt&quot;).)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717588</guid><dc:creator><![CDATA[Bloops]]></dc:creator><pubDate>Thu, 28 May 2009 21:20:29 GMT</pubDate></item><item><title><![CDATA[Reply to Welcher Datentyp für Indizes? on Thu, 28 May 2009 21:26:11 GMT]]></title><description><![CDATA[<p>Bloops schrieb:</p>
<blockquote>
<p>(und wenn's nur an dem Syntaxhighlighting liegt, das bei <code>size_t</code> &quot;fehlt&quot;).)</p>
</blockquote>
<p>da muß man den editor halz einstellen, daß er</p>
<pre><code class="language-cpp">size_t
</code></pre>
<p>auch blau macht.</p>
<p>ja, size_t ist am üblichsten. ptr_diff wäre eigtnlich richtiger, aber weil außer pumuckl das keiner weiß, bleibts wohl bei size_t.</p>
<p>und wenn man das echt nicht mag, ist long besser als int. weils auf dem 64-bitter auch 64-bittig wird, und nicht wie der int kurz bleibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717589</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 28 May 2009 21:26:11 GMT</pubDate></item><item><title><![CDATA[Reply to Welcher Datentyp für Indizes? on Thu, 28 May 2009 21:34:03 GMT]]></title><description><![CDATA[<p>long ist unter x64-MSVC immer noch 32-bittig</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717592</guid><dc:creator><![CDATA[Superlexx]]></dc:creator><pubDate>Thu, 28 May 2009 21:34:03 GMT</pubDate></item><item><title><![CDATA[Reply to Welcher Datentyp für Indizes? on Thu, 28 May 2009 23:13:22 GMT]]></title><description><![CDATA[<p>Wenn man Dinge zählt die in den Speicher passen, und es per Definition nicht negativ werden kann, dann finde ich size_t &quot;richtiger&quot; als ptrdiff_t.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717611</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 28 May 2009 23:13:22 GMT</pubDate></item><item><title><![CDATA[Reply to Welcher Datentyp für Indizes? on Thu, 28 May 2009 23:18:32 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Wenn man Dinge zählt die in den Speicher passen, und es per Definition nicht negativ werden kann, dann finde ich size_t &quot;richtiger&quot; als ptrdiff_t.</p>
</blockquote>
<p>also size_t für größenangaben und ptr_diff für indizes. sagen wir ja.<br />
wo ist das problem?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717613</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 28 May 2009 23:18:32 GMT</pubDate></item><item><title><![CDATA[Reply to Welcher Datentyp für Indizes? on Fri, 29 May 2009 11:00:31 GMT]]></title><description><![CDATA[<p>Angenommen, addressierbar wären 2 bytes (CHAR_BIT = 1), dann würde der Ausdruck 0[2] auf das 2. Byte zeigen (2 wäre ein size_t). Um das 2. Byte mit der gleichen Basisadresse mit einem ptrdiff_t zu adressieren, müsste man 0[-1] nehmen und das sieht &quot;unrichtiger&quot; aus, weil da ein integer underflow auftritt (evtl. undefiniertes Verhalten).</p>
<p>IRL würde es z.B. auftreten, wenn man ein über 2GiB großes Array/Vector in einem 4GiB Adressraum verwenden möchte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717838</guid><dc:creator><![CDATA[Superlexx]]></dc:creator><pubDate>Fri, 29 May 2009 11:00:31 GMT</pubDate></item><item><title><![CDATA[Reply to Welcher Datentyp für Indizes? on Fri, 29 May 2009 12:11:08 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a>:<br />
Garkein Problem. Und natürlich auch size_t für Indizes, wenn diese nie negativ werden können, und sich auf Dinge beziehen die in den Speicher passen (also nicht Offsets in Files o.ä.).</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/17223">@Superlexx</a>:<br />
Den Fall kann man leicht verhindern indem man sicherstellt dass man nie ein Stück das &gt;= 50% des (adressierbaren) Hauptspeichers ist anfordern kann. Bzw. dass das Programm es garnicht erst versucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717883</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717883</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 29 May 2009 12:11:08 GMT</pubDate></item></channel></rss>