<?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[Zeiger auf Array in Klasse übergeben]]></title><description><![CDATA[<p>Hi <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>Ich steh gerade vor folgender Problematik:</p>
<pre><code class="language-cpp">class MyClass {
public:

	MyClass(short smap[MAP_WIDTH][MAP_HEIGHT]) {

		// stmap soll hier als Zeiger auf smap deklariert werden.

	}

	~MyClass() {}

private:
	short **stmap[MAP_WIDTH][MAP_HEIGHT];
};

// ...

int main() {

	// ...

	MyClass foo(map)

	// ...

}
</code></pre>
<p>Das Array map aus main soll an die Klasse übergeben werden. Dabei sollen Änderungen auf dieses Array in der Klasse sich auch auf map in main auswirken.<br />
Ich dachte mir, das lässt sich am besten mit einem Zeiger auf dieses Array lösen. Jedoch weiß ich nicht, wie ich einen Zeiger auf ein ganz bestimmtes Array zeigen lasse.</p>
<p>Ich hoffe, ihr könnt mir dabei ein wenig behilflich sein. <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/245949/zeiger-auf-array-in-klasse-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 12:15:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/245949.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 21 Jul 2009 08:48:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeiger auf Array in Klasse übergeben on Tue, 21 Jul 2009 08:48:03 GMT]]></title><description><![CDATA[<p>Hi <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>Ich steh gerade vor folgender Problematik:</p>
<pre><code class="language-cpp">class MyClass {
public:

	MyClass(short smap[MAP_WIDTH][MAP_HEIGHT]) {

		// stmap soll hier als Zeiger auf smap deklariert werden.

	}

	~MyClass() {}

private:
	short **stmap[MAP_WIDTH][MAP_HEIGHT];
};

// ...

int main() {

	// ...

	MyClass foo(map)

	// ...

}
</code></pre>
<p>Das Array map aus main soll an die Klasse übergeben werden. Dabei sollen Änderungen auf dieses Array in der Klasse sich auch auf map in main auswirken.<br />
Ich dachte mir, das lässt sich am besten mit einem Zeiger auf dieses Array lösen. Jedoch weiß ich nicht, wie ich einen Zeiger auf ein ganz bestimmtes Array zeigen lasse.</p>
<p>Ich hoffe, ihr könnt mir dabei ein wenig behilflich sein. <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/1746747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746747</guid><dc:creator><![CDATA[th3AddY]]></dc:creator><pubDate>Tue, 21 Jul 2009 08:48:03 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array in Klasse übergeben on Tue, 21 Jul 2009 09:16:23 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;

int main() {
  short array[20][10] = {{0}};
  short (*zeiger)[10] = array;        // top-level array-to-pointer decay
  short (&amp;refrnz)[20][10] = array;  // Alternativ eine Referenz
  zeiger[3][4] += 1;
  refrnz[3][4] += 1;
  std::cout &lt;&lt; array[3][4];
}
</code></pre>
<p>Tipp: Vermeide Arrays.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746771</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Tue, 21 Jul 2009 09:16:23 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array in Klasse übergeben on Tue, 21 Jul 2009 09:17:19 GMT]]></title><description><![CDATA[<p>Wenn du Arrays übergibst, übergibst du bereits Zeiger. Es werden keine Kopien des Arrays gemacht, d.h. die Änderungen SIND auch in main() wirksam. Und wenn du Arrays übergibst, solltest du die maxmale Länge des Arrays mitübergeben:</p>
<pre><code class="language-cpp">#define MAX_LENGHT_X 20
#define MAX_LENGHT_Y 25

class MyClass
{
public:
    MyClass(){};
    void FirstFunc(int *nArray,unsigned dwFirstIndex,unsigned dwSecondIndex)
    {
        /*Macht irgendwas mit dem Array*/;
    }
    void SecondFunt(int *nArray,unsigned dwFirstIndex,unsigned dwSecondIndex)
    {
        /*Macht noch mehr mit dem Array*/;
    }
}

int main()
{
    int map[MAX_LENGHT_X][MAX_LENGHT_Y]; // Lerres Array
    MyClass foo(); // Klasseninstanz
    foo.FirstFunc(map,MAX_LENGHT_X-1,MAX_LENGHT_Y-1); // Das Array wird geändert
    // Hier sind die Änderungen wirksam...
    foo.SecondFunc(map,MAX_LENGHT_X-1,MAX_LENGHT_Y-1); // Das Array wird NOCHMAL geändert
    // Hier sind die zweiten Änderungen auch wirksam...
    return 0;
}
</code></pre>
<p>Ich hoffe, ich konnte helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746773</guid><dc:creator><![CDATA[Der aus dem Westen ...]]></dc:creator><pubDate>Tue, 21 Jul 2009 09:17:19 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array in Klasse übergeben on Tue, 21 Jul 2009 09:58:45 GMT]]></title><description><![CDATA[<p>Der aus dem Westen ... schrieb:</p>
<blockquote>
<pre><code class="language-cpp">#define MAX_LENGHT_X 20
#define MAX_LENGHT_Y 25
</code></pre>
</blockquote>
<p>Pfui!<br />
Die Arraylängen mit zu übergeben ist zwar ein guter Tip, aber die Längen per #define festzulegen ist bestenfalls unschön. Das mag in C zwar so üblich sein, in C++ nimmt man aber Konstanten vom richtigen Typ.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746810</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 21 Jul 2009 09:58:45 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array in Klasse übergeben on Tue, 21 Jul 2009 10:00:45 GMT]]></title><description><![CDATA[<p>Mach ich immer so - spart Speicher <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 />
Manche sagen, ich bin verrückt, dabei bin ich bloss Perfektionist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746813</guid><dc:creator><![CDATA[Der aus dem Westen ...]]></dc:creator><pubDate>Tue, 21 Jul 2009 10:00:45 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array in Klasse übergeben on Tue, 21 Jul 2009 10:04:29 GMT]]></title><description><![CDATA[<blockquote>
<p>...in C++ nimmt man aber Konstanten vom richtigen Typ</p>
</blockquote>
<p>verträgt sich aber nicht damit: <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>
<blockquote>
<p>... dabei bin ich bloss Perfektionist.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1746817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746817</guid><dc:creator><![CDATA[confuzius]]></dc:creator><pubDate>Tue, 21 Jul 2009 10:04:29 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array in Klasse übergeben on Tue, 21 Jul 2009 10:07:17 GMT]]></title><description><![CDATA[<p>Wenn man Speicher sparen will, schon.<br />
Es kommt immer auf den Blickwinkel an. Was ist wichtiger, ein funktionierendes, schnelles und speichersparendes Program oder ein schöner, toller Code?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746823</guid><dc:creator><![CDATA[Der aus dem Westen ...]]></dc:creator><pubDate>Tue, 21 Jul 2009 10:07:17 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array in Klasse übergeben on Tue, 21 Jul 2009 10:08:45 GMT]]></title><description><![CDATA[<p>Ich stelle sogar die Warnstufe auf 4 und behandele jede Warnung als Fehler. Was willst du mehr?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746825</guid><dc:creator><![CDATA[Der aus dem Westen ...]]></dc:creator><pubDate>Tue, 21 Jul 2009 10:08:45 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array in Klasse übergeben on Tue, 21 Jul 2009 10:10:45 GMT]]></title><description><![CDATA[<p>Ich sage mal ein schnelles funktionierendes Programm mit schönen tollem (dem Standard entsprechenden) Code. <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/1746828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746828</guid><dc:creator><![CDATA[confuzius]]></dc:creator><pubDate>Tue, 21 Jul 2009 10:10:45 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array in Klasse übergeben on Tue, 21 Jul 2009 10:11:08 GMT]]></title><description><![CDATA[<p>Der aus dem Westen ... schrieb:</p>
<blockquote>
<p>Mach ich immer so - spart Speicher <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 />
Manche sagen, ich bin verrückt, dabei bin ich bloss Perfektionist.</p>
</blockquote>
<p>Das spart bei nem Int auf normalen Maschinen ganze 4 Byte Speicher. Von diversen Megabyte die dir zur Verfügung stehen. Dafür handelst du dir beim Debuggen fest einkompilierte Magic Numbers an Stelle von benannten Konstanten ein, verlierst die Typsicherheit die bei C++ eingebaut ist und läufst auf seltsame Fehler wenn die Textersetzung sich nicht ganz so verhält wie du es erwartest. Das hat mit Perfektionismus nicht viel zu tun. Vgl. auch Scott Meyers <em>Effective C++</em>, erstes Kapitel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746829</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746829</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 21 Jul 2009 10:11:08 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array in Klasse übergeben on Tue, 21 Jul 2009 10:12:12 GMT]]></title><description><![CDATA[<p>Du hast speicherschonend vergessen. Da siehst du, wie weit dieser Perfektionismus geht. Funktionalität kommt vor Schönheit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746831</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746831</guid><dc:creator><![CDATA[Der aus dem Westen ...]]></dc:creator><pubDate>Tue, 21 Jul 2009 10:12:12 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array in Klasse übergeben on Tue, 21 Jul 2009 10:14:01 GMT]]></title><description><![CDATA[<p>Der aus dem Westen ... schrieb:</p>
<blockquote>
<p>Wenn man Speicher sparen will, schon.<br />
Es kommt immer auf den Blickwinkel an. Was ist wichtiger, ein funktionierendes, schnelles und speichersparendes Program oder ein schöner, toller Code?</p>
</blockquote>
<p>Ein funktionierendes, schnelles und speichersparendes Program<strong>m</strong> mit lesbarem, wartbarem und leicht debuggbarem Code. Die Konstanten werden im Release-Build eh in den Code reincompiliert, da gibts dann keinen Unterschied mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746834</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 21 Jul 2009 10:14:01 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array in Klasse übergeben on Tue, 21 Jul 2009 10:21:39 GMT]]></title><description><![CDATA[<p>Der aus dem Westen ... schrieb:</p>
<blockquote>
<p>Mach ich immer so - spart Speicher <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 />
Manche sagen, ich bin verrückt, dabei bin ich bloss Perfektionist.</p>
</blockquote>
<p>Das einzige, was Du machst, ist zu verhindern, daß die World.hpp mit</p>
<pre><code class="language-cpp">#define MAX_LENGHT_X 20
#define MAX_LENGHT_Y 25
</code></pre>
<p>Screen.hpp mit</p>
<pre><code class="language-cpp">#define MAX_LENGHT_X 80
#define MAX_LENGHT_Y 25
</code></pre>
<p>inkludieren kann.</p>
<p>Ein kleines</p>
<pre><code class="language-cpp">class MyClass
{
public:
   static int const MAX_LENGHT_X=20;
   static int const MAX_LENGHT_Y=25;
</code></pre>
<p>verbraucht natürlich keinen Speicher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746837</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 21 Jul 2009 10:21:39 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array in Klasse übergeben on Tue, 21 Jul 2009 13:37:35 GMT]]></title><description><![CDATA[<p>Vielen Dank für die schnellen Antworten. <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>Das Problem besteht jedoch weiterhin. <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="😞"
    /></p>
<p>Ich muss das Array schon im Konstruktor übergeben und als Klassenattribut(Zeiger?) speichern. Das versuche ich, wie angegeben:</p>
<pre><code class="language-cpp">MyEventReceiver(short *smap) {

// Konstruktor

}

// in main():

MyEventReceiver receiver(map);
</code></pre>
<p>Dann meckert der Debugger jedoch.</p>
<blockquote>
<p>Konvertierung des Parameters 1 von 'short [12][15]' in 'short *' nicht möglich</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1746965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746965</guid><dc:creator><![CDATA[th3AddY]]></dc:creator><pubDate>Tue, 21 Jul 2009 13:37:35 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array in Klasse übergeben on Tue, 21 Jul 2009 14:29:06 GMT]]></title><description><![CDATA[<p>Im zweiten Post steht doch, wie es richtig geht..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1747009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1747009</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 21 Jul 2009 14:29:06 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array in Klasse übergeben on Tue, 21 Jul 2009 14:32:34 GMT]]></title><description><![CDATA[<p>Der aus dem Westen ... schrieb:</p>
<blockquote>
<p>Wenn man Speicher sparen will, schon.</p>
</blockquote>
<p>Wechen Speicher?</p>
<pre><code class="language-cpp">const int dings = 23;
</code></pre>
<p><code>dings</code> besitzt in diesem Fall &quot;internal linkage&quot; und solange Du den Adressoperator nicht drauf anwendest, muss ein Compiler für <code>dings</code> auch keinen Speicher reservieren. Die 23 kann der Compiler einfach überall da eingesetzt, wo dings steht -- wenn er es denn möchte.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12679">@th3AddY</a>: Guck Dir nochmal meine erste Antwort an.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1747011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1747011</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Tue, 21 Jul 2009 14:32:34 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array in Klasse übergeben on Tue, 21 Jul 2009 16:09:06 GMT]]></title><description><![CDATA[<p>Ah ok. Sry, ich hab da was übersehen. Jetzt funktioniert es auf jeden Fall. <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>Vielen Dank. <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/1747082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1747082</guid><dc:creator><![CDATA[th3AddY]]></dc:creator><pubDate>Tue, 21 Jul 2009 16:09:06 GMT</pubDate></item></channel></rss>