<?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[Sehr komplizierte Variablendeklarationen - HILFE!]]></title><description><![CDATA[<p>Aufgabe:</p>
<p>a) Bestimmen Sie, ob das Konstrukt eine Deklaration oder eine Definition ist. Geben Sie im Falle einer Definition das Objekt an, mit dem der Name assoziiert ist.<br />
b) Schreiben Sie das Konstrukt als gültigen C++-Quellcode an.<br />
c) Identifizieren Sie die Teile Spezifizierer, Basistyp, Deklarator und Initialisierer</p>
<p>Gegeben sind die folgenden Konstrukte:</p>
<p>1. p ist ein Zeiger auf einen konstanten double. Der Zeiger wird mit 0 initialisiert.<br />
mein vorschlag: double const* p = 0;</p>
<p>2. q ist eine Funktion mit einem Zeiger auf char als Argument, die einen Zeiger auf eine Funktion liefert, die eine Referenz auf einen konstanten int als Argument besitzt und eine Referenz auf einen konstanten double liefert.<br />
mein vorschlag: (double const&amp; f(int const&amp;))* q(char*);</p>
<p>3. r ist ein Zeiger auf eine Funktion, die keine Argumente besitzt und einen int liefert. Der Zeiger wird mit s initialisiert.<br />
mein vorschlag: (int f())* r = s;</p>
<p>4. t ist ein Feld der Länge 7 mit Zeigern auf eine Funktion, die eine Referenz auf einen int als Argument besitzt und einen Zeiger auf eine Funktion liefert, die keine Argumente besitzt und einen Zeiger auf void liefert. Die ersten vier Elemente von t werden mit w, x, y, z initialisiert.<br />
mein vorschlag: ((void* q())* f(int&amp;))* t [7] = {w, y, y, z};</p>
<p>Bitte helft mir <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/topic/125097/sehr-komplizierte-variablendeklarationen-hilfe</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 05:28:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/125097.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 03 Nov 2005 13:04:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Sehr komplizierte Variablendeklarationen - HILFE! on Thu, 03 Nov 2005 13:04:59 GMT]]></title><description><![CDATA[<p>Aufgabe:</p>
<p>a) Bestimmen Sie, ob das Konstrukt eine Deklaration oder eine Definition ist. Geben Sie im Falle einer Definition das Objekt an, mit dem der Name assoziiert ist.<br />
b) Schreiben Sie das Konstrukt als gültigen C++-Quellcode an.<br />
c) Identifizieren Sie die Teile Spezifizierer, Basistyp, Deklarator und Initialisierer</p>
<p>Gegeben sind die folgenden Konstrukte:</p>
<p>1. p ist ein Zeiger auf einen konstanten double. Der Zeiger wird mit 0 initialisiert.<br />
mein vorschlag: double const* p = 0;</p>
<p>2. q ist eine Funktion mit einem Zeiger auf char als Argument, die einen Zeiger auf eine Funktion liefert, die eine Referenz auf einen konstanten int als Argument besitzt und eine Referenz auf einen konstanten double liefert.<br />
mein vorschlag: (double const&amp; f(int const&amp;))* q(char*);</p>
<p>3. r ist ein Zeiger auf eine Funktion, die keine Argumente besitzt und einen int liefert. Der Zeiger wird mit s initialisiert.<br />
mein vorschlag: (int f())* r = s;</p>
<p>4. t ist ein Feld der Länge 7 mit Zeigern auf eine Funktion, die eine Referenz auf einen int als Argument besitzt und einen Zeiger auf eine Funktion liefert, die keine Argumente besitzt und einen Zeiger auf void liefert. Die ersten vier Elemente von t werden mit w, x, y, z initialisiert.<br />
mein vorschlag: ((void* q())* f(int&amp;))* t [7] = {w, y, y, z};</p>
<p>Bitte helft mir <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/907305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/907305</guid><dc:creator><![CDATA[thomassteiner]]></dc:creator><pubDate>Thu, 03 Nov 2005 13:04:59 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr komplizierte Variablendeklarationen - HILFE! on Thu, 03 Nov 2005 13:21:05 GMT]]></title><description><![CDATA[<p>..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/907313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/907313</guid><dc:creator><![CDATA[dEUs]]></dc:creator><pubDate>Thu, 03 Nov 2005 13:21:05 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr komplizierte Variablendeklarationen - HILFE! on Thu, 03 Nov 2005 13:12:44 GMT]]></title><description><![CDATA[<p>thomassteiner schrieb:</p>
<blockquote>
<p>1. p ist ein Zeiger auf einen konstanten double. Der Zeiger wird mit 0 initialisiert.<br />
mein vorschlag: double const* p = 0;</p>
</blockquote>
<p>Das ist ein konstanter Zeiger, der auf double zeigt.<br />
//edit: const* is eh Rotz^^</p>
<pre><code>const double* p = 0;
</code></pre>
<p>so ist das besser</p>
]]></description><link>https://www.c-plusplus.net/forum/post/907314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/907314</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Thu, 03 Nov 2005 13:12:44 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr komplizierte Variablendeklarationen - HILFE! on Thu, 03 Nov 2005 13:20:37 GMT]]></title><description><![CDATA[<p>Meiner C++-Kenntnis nach ist beides das gleiche.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/907327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/907327</guid><dc:creator><![CDATA[dEUs]]></dc:creator><pubDate>Thu, 03 Nov 2005 13:20:37 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr komplizierte Variablendeklarationen - HILFE! on Thu, 03 Nov 2005 13:25:15 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int j = 578;

int *p = &amp;j;  //Variabler Zeiger, variables Objekt

const int *p2 = &amp;j;  //Variabler Zeiger, konstantes Objekt
//int const *p2 = &amp;j;  //ebenso: Variabler Zeiger, konstantes Objekt

int * const p3 = &amp;j; //Konstanter Zeiger, variables Objekt

const int * const p4 = &amp;j;  //Konstanter Zeiger, konstantes Objekt
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/907333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/907333</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Thu, 03 Nov 2005 13:25:15 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr komplizierte Variablendeklarationen - HILFE! on Thu, 03 Nov 2005 13:27:19 GMT]]></title><description><![CDATA[<p>Pellaeon schrieb:</p>
<blockquote>
<p>thomassteiner schrieb:</p>
<blockquote>
<p>1. p ist ein Zeiger auf einen konstanten double. Der Zeiger wird mit 0 initialisiert.<br />
mein vorschlag: double const* p = 0;</p>
</blockquote>
<p>Das ist ein konstanter Zeiger, der auf double zeigt.<br />
//edit: const* is eh Rotz^^</p>
<pre><code>const double* p = 0;
</code></pre>
<p>so ist das besser</p>
</blockquote>
<p>nö.<br />
&quot;p ist ein Zeiger auf einen konstanten double&quot; liest man vom p aus nach außen.<br />
double const* p<br />
&quot;p ist ein konstanter Zeiger auf einen double&quot; liest man auch vom p aus nach außen.<br />
double * const p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/907336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/907336</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 03 Nov 2005 13:27:19 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr komplizierte Variablendeklarationen - HILFE! on Thu, 03 Nov 2005 13:47:43 GMT]]></title><description><![CDATA[<p>du hast noch probleme mit der deklaration von funktionen und -zeigern.<br />
die C syntax ist hier sehr eigenwillig, aber wenn man das prinzip verstanden hat, ist es im grunde simpel:<br />
- es gibt 2 arten von modifikatoren: prä- und postfix (stets bezogen auf den bezeichner, der evtl. fehlen kann) modifikatoren (ganz analog zu operatoren in ausdrücken), postfix-modifikatoren haben stets vorrang vor präfix-modifikatoren<br />
- präfix: * &amp; const volatile<br />
- postfix: () []</p>
<p>also</p>
<pre><code class="language-cpp">int *a
</code></pre>
<p>lies von rechts nach links (immer vom bezeichner weg, zeiger auf int)</p>
<pre><code class="language-cpp">int a[]
</code></pre>
<p>zunächst die postfix-modifikatoren also ein array, dann die linke seite 'von ints'</p>
<pre><code class="language-cpp">int *a[]
</code></pre>
<p>- analog ein array von zeigern auf int<br />
mit zusätzlichen klammern können wir den vorrang von modfikatoren ändern:</p>
<pre><code class="language-cpp">int (*a)[]
</code></pre>
<p>ist ein zeiger auf ein array von ints</p>
<p>unterscheiden kannst du diesen fall (klammern benutzt um vorrang zu ändern) von funktionsdeklarationen leicht dadurch, dass hier die klammern den bezeichner umschliessen.</p>
<p>also</p>
<pre><code class="language-cpp">int a()
</code></pre>
<p>eine funktion, die keine argumente hat und ein int zurückliefert</p>
<pre><code class="language-cpp">int *a()
</code></pre>
<p>eine funktion, die keine argumente hat und einen zeiger auf int zurückliefert</p>
<pre><code class="language-cpp">int (*a)()
</code></pre>
<p>ein zeiger auf eine funktion, die keine argumente hat und ein int zurückliefert</p>
<p>implizite typdefinitionen für rückgabewerte oder argumente einer funktion schreibst du auf dieselbe weise, nur lässt du einfach den bezeichner weg</p>
<p>wir nehmen das letzte beispiel, einen zeiger auf eine funktion, die keine argumente hat und ein int zurückliefert und wollen jetzt eine funktion, die einen solchen funktionszeiger zurückliefert:</p>
<p>also</p>
<pre><code class="language-cpp">int (*a)()
</code></pre>
<p>wir lassen den bezeichner weg:</p>
<pre><code class="language-cpp">int (*)()
</code></pre>
<p>und machen eine funktion daraus, die diesen zeiger zurückgibt:</p>
<pre><code class="language-cpp">int (*)() f()
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/907364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/907364</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 03 Nov 2005 13:47:43 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr komplizierte Variablendeklarationen - HILFE! on Thu, 03 Nov 2005 13:57:54 GMT]]></title><description><![CDATA[<p>hier noch was exotisches:</p>
<pre><code class="language-cpp">volatile X*const&amp; (Y::*[])(Z(&amp;)())const foo()
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/907376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/907376</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 03 Nov 2005 13:57:54 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr komplizierte Variablendeklarationen - HILFE! on Thu, 03 Nov 2005 15:59:18 GMT]]></title><description><![CDATA[<p>thomassteiner schrieb:</p>
<blockquote>
<p>Bitte helft mir <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>Gerne, welche Probleme hast du denn?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/907497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/907497</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Thu, 03 Nov 2005 15:59:18 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr komplizierte Variablendeklarationen - HILFE! on Thu, 03 Nov 2005 17:06:06 GMT]]></title><description><![CDATA[<p>thx für die antworten erstmal.<br />
gleich mal umsetzen <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/907539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/907539</guid><dc:creator><![CDATA[thomassteiner]]></dc:creator><pubDate>Thu, 03 Nov 2005 17:06:06 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr komplizierte Variablendeklarationen - HILFE! on Thu, 03 Nov 2005 17:31:42 GMT]]></title><description><![CDATA[<p>okay, erstmal danke.</p>
<p>ich habe folgende ergebnisse:<br />
1. double const* p = 0;<br />
2. const double&amp; (* q(char*))(int&amp;);<br />
3. int (<em>r)() = s;<br />
4. void</em> (<em>)() (</em> t[7])(int&amp;) = {w, x, y, z};</p>
<p>die drei ersten ausdrücke lassen sich kompilieren.<br />
der 4. ausdruck liefert aber folgende fehlermeldung:</p>
<p>error C2059: syntax error : ')'</p>
<p>wer kann mir weiterhelfen? <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/907567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/907567</guid><dc:creator><![CDATA[thomassteiner]]></dc:creator><pubDate>Thu, 03 Nov 2005 17:31:42 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr komplizierte Variablendeklarationen - HILFE! on Thu, 03 Nov 2005 17:55:25 GMT]]></title><description><![CDATA[<p>der letzte teil meines postings war unsinn ... eine solche grammatik wäre auch nicht eindeutig. richtig ist:</p>
<pre><code class="language-cpp">int (*a)()
</code></pre>
<p>nun soll a kein einfacher bezeichner sein, sondern selbst eine funktion, also:</p>
<pre><code class="language-cpp">int (*f())()
</code></pre>
<p>diese verschachtelung macht das ganze ziemlich schnell unübersichtlich, zum glück gibt es ja typedefs; und ein C++ programmierer muss sowas gar nicht lesen können <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/907577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/907577</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 03 Nov 2005 17:55:25 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr komplizierte Variablendeklarationen - HILFE! on Thu, 03 Nov 2005 18:51:07 GMT]]></title><description><![CDATA[<p>ah perfekt. dann lautet der ausdruck also:</p>
<pre><code class="language-cpp">void* (*(* t[7])(int&amp;))();
</code></pre>
<p>wo liegen bei so einem ausdruck aber basistyp und deklarator?<br />
ist der basistyp einfach der am weitesten links liegende datentyp und der deklarator der rest?</p>
<p>in diesem fall also:</p>
<p>basistyp: void<br />
deklarator: * (<em>(</em> t[7])(int&amp;))()</p>
]]></description><link>https://www.c-plusplus.net/forum/post/907627</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/907627</guid><dc:creator><![CDATA[thomassteiner]]></dc:creator><pubDate>Thu, 03 Nov 2005 18:51:07 GMT</pubDate></item></channel></rss>