<?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[2 dimensionales Feld mit Pointer]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte ein 2 dimensionales Feld zur Laufzeit erzeugen in dem Werte 0/1 gespeichert werden (mit array bekomme ich es nicht hin). Die Größe (Höhe * Breite) wird dem Konstruktor als Parameter übergeben. Also zum Beispiel:</p>
<pre><code class="language-cpp">#ifndef FELD_H
#define FELD_H

class Feld {
public:
	Feld(size_t width, size_t height) {
		// irgendwas erzeugen, wo man Feldwerte speichern kann
	};

	enum wert readPos(size_t x, size_t y);
	void setPos(size_t x, size_t y, enum wert feldinhalt);

private:
	//char board[höhe?][breite?];
};

#endif
</code></pre>
<p>Ich wollte dann mit der readPos und setPos auf diese Werte zugreifen. Mit einem array geht das scheinbar nicht, da beim Kompilieren schon bekannt sein muss, wie groß dieses ist.</p>
<p>Nun dachte ich an Pointers. Und dann Speicher allokieren. Also bei einem ein dimensionales Feld dann einfach den Zeiger entsprechend oft erhöhen, um auf den richtige Wert zu zugreifen.<br />
<strong>Aber wie mache ich dies nun bei einem zwei dimensionalen Feld?</strong> <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/topic/295239/2-dimensionales-feld-mit-pointer</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 11:15:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/295239.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 09 Nov 2011 18:13:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 2 dimensionales Feld mit Pointer on Wed, 09 Nov 2011 18:13:15 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte ein 2 dimensionales Feld zur Laufzeit erzeugen in dem Werte 0/1 gespeichert werden (mit array bekomme ich es nicht hin). Die Größe (Höhe * Breite) wird dem Konstruktor als Parameter übergeben. Also zum Beispiel:</p>
<pre><code class="language-cpp">#ifndef FELD_H
#define FELD_H

class Feld {
public:
	Feld(size_t width, size_t height) {
		// irgendwas erzeugen, wo man Feldwerte speichern kann
	};

	enum wert readPos(size_t x, size_t y);
	void setPos(size_t x, size_t y, enum wert feldinhalt);

private:
	//char board[höhe?][breite?];
};

#endif
</code></pre>
<p>Ich wollte dann mit der readPos und setPos auf diese Werte zugreifen. Mit einem array geht das scheinbar nicht, da beim Kompilieren schon bekannt sein muss, wie groß dieses ist.</p>
<p>Nun dachte ich an Pointers. Und dann Speicher allokieren. Also bei einem ein dimensionales Feld dann einfach den Zeiger entsprechend oft erhöhen, um auf den richtige Wert zu zugreifen.<br />
<strong>Aber wie mache ich dies nun bei einem zwei dimensionalen Feld?</strong> <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/2142622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2142622</guid><dc:creator><![CDATA[bugbug]]></dc:creator><pubDate>Wed, 09 Nov 2011 18:13:15 GMT</pubDate></item><item><title><![CDATA[Reply to 2 dimensionales Feld mit Pointer on Wed, 09 Nov 2011 18:14:14 GMT]]></title><description><![CDATA[<p>Nimm vector.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2142623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2142623</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 09 Nov 2011 18:14:14 GMT</pubDate></item><item><title><![CDATA[Reply to 2 dimensionales Feld mit Pointer on Thu, 10 Nov 2011 08:10:10 GMT]]></title><description><![CDATA[<p>So ungefähr:</p>
<pre><code class="language-cpp">#ifndef YOUR_PROJECTS_FELD_H
#define YOUR_PROJECTS_FELD_H

#include &lt;vector&gt;

typedef ... wert;

class Feld {
public:
   typedef std::vector&lt;wert&gt;::reference reference;
   typedef std::vector&lt;wert&gt;::size_type size_type;
   Feld() : size1_(0), size2_(0) {}
   Feld(size_type size1, size_type size2) : size1_(0), size2_(0) {resize(size1,size2);}
   void resize(size_type size1, size_type size2);
   size_type size1() const {return size1_;}
   size_type size2() const {return size2_;}
   wert      operator()(size_type i, size_type j) const {return elements_[indexof(i,j)];}
   reference operator()(size_type i, size_type j)       {return elements_[indexof(i,j)];}
private:
   size_type size1_, size2_;
   std::vector&lt;wert&gt; elements_;
   size_type indexof(size_type i, size_type j) {return i*size2_+j;}
};

#endif
</code></pre>
<p>(ungetestet)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2142739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2142739</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 10 Nov 2011 08:10:10 GMT</pubDate></item><item><title><![CDATA[Reply to 2 dimensionales Feld mit Pointer on Sun, 13 Nov 2011 13:17:46 GMT]]></title><description><![CDATA[<p>danke schonmal!</p>
<p>Was ist der Unterschied zwischen dem wert-Operator und dem reference-Operator? <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="😕"
    /><br />
Und für resize(size_type size1, size_type size2) fehlt doch noch irgendwie, dass size1_, size2_ den Wert zugewiesen bekommt?</p>
<p>Das ist das erstmal, dass ich mit vector arbeite. <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/2143941</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2143941</guid><dc:creator><![CDATA[bugbug]]></dc:creator><pubDate>Sun, 13 Nov 2011 13:17:46 GMT</pubDate></item><item><title><![CDATA[Reply to 2 dimensionales Feld mit Pointer on Sun, 13 Nov 2011 15:40:09 GMT]]></title><description><![CDATA[<p>Was muss ich nehmen, damit resize die richtige Größe übergeben bekommt?</p>
<pre><code class="language-cpp">resize(size_type size1, size_type size2) {elements_.resize(size1 * size2);}
</code></pre>
<p>ist bestimmt falsch, oder? <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/2143978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2143978</guid><dc:creator><![CDATA[bugbug]]></dc:creator><pubDate>Sun, 13 Nov 2011 15:40:09 GMT</pubDate></item><item><title><![CDATA[Reply to 2 dimensionales Feld mit Pointer on Mon, 14 Nov 2011 09:27:48 GMT]]></title><description><![CDATA[<p>Nö, sieht gut aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2144263</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2144263</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Mon, 14 Nov 2011 09:27:48 GMT</pubDate></item><item><title><![CDATA[Reply to 2 dimensionales Feld mit Pointer on Mon, 14 Nov 2011 09:41:49 GMT]]></title><description><![CDATA[<p>bugbug schrieb:</p>
<blockquote>
<p>Was ist der Unterschied zwischen dem wert-Operator und dem reference-Operator? <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>
</blockquote>
<p>Der erste wird genommen, wenn Du &quot;nur Lesezugriff&quot; auf ein Feldobjekt hast. Der zweite, wenn Du auch &quot;Schreibzugriff&quot; hast. Das liegt an der Präsenz/dem Fehlen von <code>const</code> dahinter. <code>std::vector&lt;wert&gt;::reference</code> ist das, was der nicht-const operator[] von vector zurück gibt. Damit kannst du das Element auch verändern:</p>
<pre><code class="language-cpp">Feld f = ...;
f(2,2) = 99;
</code></pre>
<p>Wenn Du jetzt nur Wahrheitswerte speichern willst, kannst Du ruhig bool statt wert verwenden. std::vector&lt;bool&gt; legt die Daten auch komprimiert im Speicher ab. Wenn Dir das dann aber zu langsam ist, kannst Du bei Deinem enum bleiben oder std::vector&lt;char&gt; verwenden oder so. Dann verbrätst Du ein ganzes Byte für einen Wahrheitswert, es mag aber schneller sein.</p>
<p>bugbug schrieb:</p>
<blockquote>
<p>Was muss ich nehmen, damit resize die richtige Größe übergeben bekommt?</p>
<pre><code class="language-cpp">resize(size_type size1, size_type size2) {elements_.resize(size1 * size2);}
</code></pre>
<p>ist bestimmt falsch, oder? <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>
</blockquote>
<p>Innerhalb von resize solltest auch auch noch die Datenelemente size1_ und size2_ ändern. Sonst sieht das OK aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2144271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2144271</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 14 Nov 2011 09:41:49 GMT</pubDate></item><item><title><![CDATA[Reply to 2 dimensionales Feld mit Pointer on Mon, 14 Nov 2011 18:03:27 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>bugbug schrieb:</p>
<blockquote>
<p>Was ist der Unterschied zwischen dem wert-Operator und dem reference-Operator? <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>
</blockquote>
<p>Der erste wird genommen, wenn Du &quot;nur Lesezugriff&quot; auf ein Feldobjekt hast. Der zweite, wenn Du auch &quot;Schreibzugriff&quot; hast.</p>
</blockquote>
<p>Das stimmt so eigentlich nicht. Der Unterschied ist eigentlich, dass wenn du den &quot;Wert-Operator&quot; benutzt, wird eine Kopie von dem Objekt erzeugt. Wenn du eine Referenz übergibst kannst du das objekt direkt manipulieren. Intern wird das mit Zeigern realisiert.<br />
Stichwort: call-by-value bzw. call-by-reference</p>
<p>Will man nur lesezugriff verwendet man ein const</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2144428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2144428</guid><dc:creator><![CDATA[MrKnister]]></dc:creator><pubDate>Mon, 14 Nov 2011 18:03:27 GMT</pubDate></item></channel></rss>