<?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[Brauche Hilfe bei Lösungen]]></title><description><![CDATA[<p>Hallo,<br />
ich hätte da gerne mal ein paar fragen zu Aufgaben aus meinem C++ Buch.</p>
<p>Aufgabe: typedef für folgende variablentypen benutzen:</p>
<pre><code>unsigned char
const unsigned char
Zeiger auf Integer
Zeiger auf Zeiger auf Char
Zeiger auf Feld von Char
Feld von 7 Zeigern auf Integer
Zeiger auf Feld von 7 Zeigern auf Integer
Feld von 8 Feldern von 7 Zeigern auf Int
</code></pre>
<p>Das habe ich nun so gelöst:</p>
<pre><code>typedef unsigned char uchar; // unsigned char
typedef const unsigned char conuchar; // const unsigned char
typedef int* iPtr; // Zeiger auf Integer
typedef char** cPtrPtr; // Zeiger auf Zeiger auf Char
typedef char*(*CharArrayPtr)[] ; // Zeiger auf Feld von Char
typedef int* sevenIntPtr [7]; // Feld von 7 Zeigern auf Integer
typedef int* (*ptrToArrayOfSevenInt[7] ); // Zeiger auf Feld von 7 Zeigern auf Integer
typedef int* ((*WeirdVar[7])[8]) []; //Feld von 8 Feldern von 7 Zeigern auf Integer
</code></pre>
<p>Nun möchte ich von euch wissen, ob ich die Variablen richtig ausgeschrieben habe (besonders bei den letzten 2 war ich mir unsicher).</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/323272/brauche-hilfe-bei-lösungen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Jul 2026 06:52:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/323272.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 23 Jan 2014 21:53:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Brauche Hilfe bei Lösungen on Thu, 23 Jan 2014 21:56:28 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich hätte da gerne mal ein paar fragen zu Aufgaben aus meinem C++ Buch.</p>
<p>Aufgabe: typedef für folgende variablentypen benutzen:</p>
<pre><code>unsigned char
const unsigned char
Zeiger auf Integer
Zeiger auf Zeiger auf Char
Zeiger auf Feld von Char
Feld von 7 Zeigern auf Integer
Zeiger auf Feld von 7 Zeigern auf Integer
Feld von 8 Feldern von 7 Zeigern auf Int
</code></pre>
<p>Das habe ich nun so gelöst:</p>
<pre><code>typedef unsigned char uchar; // unsigned char
typedef const unsigned char conuchar; // const unsigned char
typedef int* iPtr; // Zeiger auf Integer
typedef char** cPtrPtr; // Zeiger auf Zeiger auf Char
typedef char*(*CharArrayPtr)[] ; // Zeiger auf Feld von Char
typedef int* sevenIntPtr [7]; // Feld von 7 Zeigern auf Integer
typedef int* (*ptrToArrayOfSevenInt[7] ); // Zeiger auf Feld von 7 Zeigern auf Integer
typedef int* ((*WeirdVar[7])[8]) []; //Feld von 8 Feldern von 7 Zeigern auf Integer
</code></pre>
<p>Nun möchte ich von euch wissen, ob ich die Variablen richtig ausgeschrieben habe (besonders bei den letzten 2 war ich mir unsicher).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2379241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2379241</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Thu, 23 Jan 2014 21:56:28 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe bei Lösungen on Thu, 23 Jan 2014 22:13:00 GMT]]></title><description><![CDATA[<p><a href="http://cdecl.ridiculousfish.com/" rel="nofollow">Schummel einfach.</a> (link von SeppJ geklaut)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2379244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2379244</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Thu, 23 Jan 2014 22:13:00 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe bei Lösungen on Thu, 23 Jan 2014 22:56:05 GMT]]></title><description><![CDATA[<p>typedef int* ((*WeirdVar[7])[8]) []; //Feld von 8 Feldern von 7 Zeigern auf Integer<br />
Nee.<br />
Typelesen geht so:</p>
<p>Man liest den Bezeichner<br />
int* ((*<strong>WeirdVar</strong>[7])[8]) [];<br />
WeirdVar ist...</p>
<p>Und dann immer rechts vor links, außer eine überraschende runde Klammern zwingt einen, erst drinnen zu bleiben.</p>
<p>Also gehts nach rechts.<br />
int* ((*<strong>WeirdVar[7]</strong>)[8]) [];<br />
WeirdVar ist ein Array von 7...</p>
<p>Ah, die Klammer.</p>
<p>int* ((*<strong>WeirdVar[7]</strong>)[8]) [];<br />
WeirdVar ist ein Array von 7 Zeigern auf...</p>
<p>So, in der Klammer ist alles gelesen, kann weg.<br />
int* (<strong>(*WeirdVar[7])</strong>[8]) [];</p>
<p>Rechts gehts weiter, rechts vor links.<br />
int* (<strong>(*WeirdVar[7])[8]</strong>) [];<br />
WeirdVar ist ein Array von 7 Zeigern auf Array von 8...</p>
<p>Überraschende klammer, ich suche also links, oh, da ist nix mehr, diese Klammer war wohl gar nicht nötig.</p>
<p>int* *<em>((<em>WeirdVar[7])[8])</em></em> [];</p>
<p>Weiter rechts.</p>
<p>int* <strong>((*WeirdVar[7])[8]) []</strong>;<br />
WeirdVar ist ein Array von 7 Zeigern auf Array von 8 Arrays von...</p>
<p>int*** ((*WeirdVar[7])[8]) []**;<br />
WeirdVar ist ein Array von 7 Zeigern auf Array von 8 Arrays von Zeigern auf...</p>
<p><em><em>int</em> ((*WeirdVar[7])[8]) []</em>*;<br />
WeirdVar ist ein Array von 7 Zeigern auf Array von 8 Arrays von Zeigern auf int.</p>
<p>Also das Lesen geht ganz mechanisch. Das Schreiben nicht, aber egal, kannst ja ein wenig fummeln und es ja immer durch Lesen prüfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2379247</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2379247</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 23 Jan 2014 22:56:05 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe bei Lösungen on Fri, 24 Jan 2014 07:17:56 GMT]]></title><description><![CDATA[<p>Trampeltier schrieb:</p>
<blockquote>
<p>Hallo,<br />
ich hätte da gerne mal ein paar fragen zu Aufgaben aus meinem C++ Buch.</p>
<p>Aufgabe: typedef für folgende variablentypen benutzen:</p>
<pre><code>unsigned char
const unsigned char
Zeiger auf Integer
Zeiger auf Zeiger auf Char
Zeiger auf Feld von Char
Feld von 7 Zeigern auf Integer
Zeiger auf Feld von 7 Zeigern auf Integer
Feld von 8 Feldern von 7 Zeigern auf Int
</code></pre>
<p>Das habe ich nun so gelöst:</p>
<pre><code>typedef unsigned char uchar; // unsigned char
typedef const unsigned char conuchar; // const unsigned char
typedef int* iPtr; // Zeiger auf Integer
typedef char** cPtrPtr; // Zeiger auf Zeiger auf Char
typedef char*(*CharArrayPtr)[] ; // Zeiger auf Feld von Char
typedef int* sevenIntPtr [7]; // Feld von 7 Zeigern auf Integer
typedef int* (*ptrToArrayOfSevenInt[7] ); // Zeiger auf Feld von 7 Zeigern auf Integer
typedef int* ((*WeirdVar[7])[8]) []; //Feld von 8 Feldern von 7 Zeigern auf Integer
</code></pre>
<p>Nun möchte ich von euch wissen, ob ich die Variablen richtig ausgeschrieben habe (besonders bei den letzten 2 war ich mir unsicher).</p>
</blockquote>
<p>Die letzten beiden kannst Du einfacher schreiben, indem Du dich auf das drittletzte beziehst:</p>
<pre><code>typedef sevenIntPtr *ptrToArrayOfSevenInt;
typedef sevenIntPtr WeirdVar[8];
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2379262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2379262</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Fri, 24 Jan 2014 07:17:56 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe bei Lösungen on Fri, 24 Jan 2014 08:19:00 GMT]]></title><description><![CDATA[<pre><code>typedef char*(*CharArrayPtr)[] ; // Zeiger auf Feld von Char
</code></pre>
<p>Nein, Zeiger auf ein Array von Zeigern auf char.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2379269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2379269</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Fri, 24 Jan 2014 08:19:00 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe bei Lösungen on Fri, 24 Jan 2014 11:50:53 GMT]]></title><description><![CDATA[<p>Trampeltier schrieb:</p>
<blockquote>
<pre><code>typedef const unsigned char conuchar; // const unsigned char
</code></pre>
</blockquote>
<p>Es wäre keine überaus törichte Idee, Dir das const gleich an der neuen Stelle anzugewöhnen.</p>
<p>Nach Typenleseregel, vom Beizericher aus loslesen nach außen:<br />
int const * px;<br />
px ist ein Zeiger auf konstanten int.<br />
Also *px=5 geht nicht, aber px=&amp;y.</p>
<p>int * const px;<br />
px ist konstanter Zeiger auf int.<br />
Also *px=5 geht, nicht aber px=&amp;y.</p>
<p>int const * const px;<br />
px ist konstanter Zeiger auf konstanten int.<br />
Beides geht nicht.</p>
<p>Die alte Schreibweise<br />
const int * const x;<br />
x ist konstanter Zeiger auf int, der konstant ist, ist doch unhüsch.</p>
<p>void foo(Auto const&amp; a);<br />
//Ein Auto wird genommen, und zwar als Übergabe per const&amp;. Die const&amp;-Übergabe ist zu sehen wie Wertübergabe, nur schneller (wenn das a nicht kaputtgemacht werden darf). Als Übergaben haben wir<br />
(Auto a)//Kopie, evtl in Sachen C++11 fürs wegmoven optrimiert<br />
(Auto* a)//Die Aufgerufene soll ändern können<br />
(Auto const* a)//verwende ich nicht<br />
(Auto &amp;a)//Die Aufgerufene soll ändern können, und &amp;a ist nicht NULL//verwende ich auch nicht<br />
(Auto const&amp; a)//Fühlt sich an wie Kopie, keine move-Optimierung</p>
<p>Mit dem neuen const steht auch die Aufrufweise zusammen, statt daß man sie sich von vor und hinter dem Auto zusammensuchen muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2379306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2379306</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 24 Jan 2014 11:50:53 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe bei Lösungen on Fri, 24 Jan 2014 14:01:20 GMT]]></title><description><![CDATA[<pre><code>const int * const x;
</code></pre>
<p>Verboten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<pre><code>(Auto const* a)//verwende ich nicht
</code></pre>
<p>Na, aber das ist doch &quot;optionales Argument das konstant ist&quot;. Oder nutzt man in diesem konkreten Fall sowieso nie <code>const</code> ? soweit ich mich erinnere &quot;will man ja keine Information ueber die Implementierung nach aussen geben&quot;(?)</p>
<pre><code>(Auto &amp;a) //verwende ich auch nicht
</code></pre>
<p>Wieso nicht!? Wie nimmst du sonst eine veraenderbare Referenz eines Objektes? Doch nicht standardmaessig mit Zeigern?</p>
<blockquote>
<p>(Auto const&amp; a)//Fühlt sich an wie Kopie, keine move-Optimierung</p>
</blockquote>
<p>Das Problem ist, dass es zwei Moeglichkeiten gibt, was passiert, wenn ich eine Const-Referenz initialisiere: Entweder sie bindet direkt (weder Move noch Kopie), oder es wird eine Temporary erstellt, welche mit dem Initializer der Referenz kopierinitialisiert wird, das passiert aber nur bei prvalues - und das fuehrt zu Moves (wenn moeglich, sonst Kopie). Also muss nichts kopiert werden (wenn Moves moeglich sind).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2379331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2379331</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Fri, 24 Jan 2014 14:01:20 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe bei Lösungen on Fri, 24 Jan 2014 14:13:48 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>typedef int* ((*WeirdVar[7])[8]) []; //Feld von 8 Feldern von 7 Zeigern auf Integer<br />
Nee.<br />
Typelesen geht so:</p>
<p>Man liest den Bezeichner<br />
int* ((*<strong>WeirdVar</strong>[7])[8]) [];<br />
WeirdVar ist...</p>
<p>Und dann immer rechts vor links, außer eine überraschende runde Klammern zwingt einen, erst drinnen zu bleiben.</p>
<p>Also gehts nach rechts.<br />
int* ((*<strong>WeirdVar[7]</strong>)[8]) [];<br />
WeirdVar ist ein Array von 7...</p>
<p>Ah, die Klammer.</p>
<p>int* ((*<strong>WeirdVar[7]</strong>)[8]) [];<br />
WeirdVar ist ein Array von 7 Zeigern auf...</p>
<p>So, in der Klammer ist alles gelesen, kann weg.<br />
int* (<strong>(*WeirdVar[7])</strong>[8]) [];</p>
<p>Rechts gehts weiter, rechts vor links.<br />
int* (<strong>(*WeirdVar[7])[8]</strong>) [];<br />
WeirdVar ist ein Array von 7 Zeigern auf Array von 8...</p>
<p>Überraschende klammer, ich suche also links, oh, da ist nix mehr, diese Klammer war wohl gar nicht nötig.</p>
<p>int* *<em>((<em>WeirdVar[7])[8])</em></em> [];</p>
<p>Weiter rechts.</p>
<p>int* <strong>((*WeirdVar[7])[8]) []</strong>;<br />
WeirdVar ist ein Array von 7 Zeigern auf Array von 8 Arrays von...</p>
<p>int*** ((*WeirdVar[7])[8]) []**;<br />
WeirdVar ist ein Array von 7 Zeigern auf Array von 8 Arrays von Zeigern auf...</p>
<p><em><em>int</em> ((*WeirdVar[7])[8]) []</em>*;<br />
WeirdVar ist ein Array von 7 Zeigern auf Array von 8 Arrays von Zeigern auf int.</p>
<p>Also das Lesen geht ganz mechanisch. Das Schreiben nicht, aber egal, kannst ja ein wenig fummeln und es ja immer durch Lesen prüfen.</p>
</blockquote>
<p>Also ist folgendes korrekt?:</p>
<pre><code>typedef int* ((WeirdVar[])[8]) [7]; //Feld von 8 Feldern von 7 Zeigern auf Integer
</code></pre>
<p>Ich weiß nicht, was mit &quot;Feld von 8 Feldern von 7 Zeigern auf Integer&quot; gemeint ist.<br />
Entweder obriges oder möglicherweise dies?:</p>
<pre><code>typedef int* WeirdVar[8][7];
</code></pre>
<p>Wobei das Zweite ein zweidimensionaler Array ist.<br />
Die Aufgabe ist möglicherweise etwas schlecht formuliert, das fällt mir bei dem Buch auch insgesamt ein bisschen auf. Es heißt &quot;Die C++ Programmiersprache von Bjarne Stroustrup&quot;.<br />
Das Originale Buch im Englischen ist wahrscheinlich verständlicher, da ich mir vorstellen kann, dass so ein Buch über eine Programmiersprache ziemlich schwer ist, zu übersetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2379333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2379333</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Fri, 24 Jan 2014 14:13:48 GMT</pubDate></item></channel></rss>