<?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[sizeof in einer unterfunktion]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>Ich habe folgendes Programm das vereinfacht in etwa so aussieht:</p>
<pre><code>class berta
{
 int feldeins[10];
 int feldzwei[20];

 void crc(int *);
 void haupt();
}
</code></pre>
<pre><code>haupt()
{
 printf(&quot;%d&quot;,sizeof(feldeins));
 crc(feldeins);
}
</code></pre>
<pre><code>crc(int *m)
{
printf(&quot;%d&quot;,sizeof(m));
}
</code></pre>
<p>Ich hab das problem das ich die unterfunktion crc für 2 verschiedene feldgrößen benötige und ich jeweils in der funktion wissen will wie gross das feld ist. Bloss liefert mit das printf im unterprogramm nicht die richtige Größe..</p>
<p>m müsste doch auch 4 Byte groß sein?</p>
<p>weis jemand rat?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/188940/sizeof-in-einer-unterfunktion</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 05:07:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/188940.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 06 Aug 2007 14:33:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to sizeof in einer unterfunktion on Mon, 06 Aug 2007 15:02:42 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>Ich habe folgendes Programm das vereinfacht in etwa so aussieht:</p>
<pre><code>class berta
{
 int feldeins[10];
 int feldzwei[20];

 void crc(int *);
 void haupt();
}
</code></pre>
<pre><code>haupt()
{
 printf(&quot;%d&quot;,sizeof(feldeins));
 crc(feldeins);
}
</code></pre>
<pre><code>crc(int *m)
{
printf(&quot;%d&quot;,sizeof(m));
}
</code></pre>
<p>Ich hab das problem das ich die unterfunktion crc für 2 verschiedene feldgrößen benötige und ich jeweils in der funktion wissen will wie gross das feld ist. Bloss liefert mit das printf im unterprogramm nicht die richtige Größe..</p>
<p>m müsste doch auch 4 Byte groß sein?</p>
<p>weis jemand rat?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339630</guid><dc:creator><![CDATA[traceman]]></dc:creator><pubDate>Mon, 06 Aug 2007 15:02:42 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof in einer unterfunktion on Mon, 06 Aug 2007 14:38:53 GMT]]></title><description><![CDATA[<p>traceman schrieb:</p>
<blockquote>
<p>Hallo Leute,</p>
<p>Ich habe folgende Unterfunktion die in etwa so aussieht:</p>
<pre><code>class berta
{
 int feldeins[10];
 int feldzwei[20];

 void crc(int *);
 void haupt();
}
</code></pre>
<pre><code>haupt()
{
 printf(&quot;%d&quot;,sizeof(feldeins));
 crc(feldeins);
}
</code></pre>
<pre><code>crc(int *m)
{
printf(&quot;%d&quot;,sizeof(m));
}
</code></pre>
<p>Ich hab das problem das ich die unterfunktion crc für 2 verschiedene feldgrößen benötige und ich jeweils in der funktion wissen will wie gross das feld ist. Bloss liefert mit das printf im unterprogramm nicht die richtige Größe..</p>
<p>m müsste doch auch 4 Byte groß sein?</p>
<p>weis jemand rat?</p>
</blockquote>
<p>troll</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339632</guid><dc:creator><![CDATA[??GG]]></dc:creator><pubDate>Mon, 06 Aug 2007 14:38:53 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof in einer unterfunktion on Mon, 06 Aug 2007 14:49:44 GMT]]></title><description><![CDATA[<p>traceman schrieb:</p>
<blockquote>
<p>...</p>
<pre><code>crc(int *m) {
   printf(&quot;%d&quot;,sizeof(m));
}
</code></pre>
</blockquote>
<p>Welchen Typ hat m ? =&gt; int*<br />
Welche Größe hat &quot;int*&quot; =&gt; immer denselben, egal, wo der Zeiger hinzeigt (Bei Deiner Plattform offensichtlich 4 &quot;char-Einheiten&quot;).<br />
=&gt; Alles in Ordnung mit Deinem Compiler !<br />
Alternative:</p>
<pre><code class="language-cpp">class berta
{
 int feldeins[10];
 int feldzwei[20];

 void crc(int *, size_t);
 void haupt();
}

haupt()
{
 printf(&quot;%d&quot;,sizeof(feldeins));
 crc(feldeins, sizeof(feldeins));
}

crc(int *m, size_t len)
{
printf(&quot;%d&quot;,len);
}
</code></pre>
<p>Ach ja: WENN crc() schon eine Memberfunktion von &quot;berta&quot; ist, ha sie doch sowieso Zugriff auf die Member feldeins und feldzwei .... warum noch separat übergeben ?</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339635</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 06 Aug 2007 14:49:44 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof in einer unterfunktion on Mon, 06 Aug 2007 14:51:41 GMT]]></title><description><![CDATA[<p>eben nicht!!!... crc liefert 1 und haupt liefert 4......(byte)....<br />
ausserdem: bevor du &quot;troll&quot; druntersetzt kannst dir deinen kommentar gleich sparen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339641</guid><dc:creator><![CDATA[traceman]]></dc:creator><pubDate>Mon, 06 Aug 2007 14:51:41 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof in einer unterfunktion on Mon, 06 Aug 2007 14:57:45 GMT]]></title><description><![CDATA[<blockquote>
<p>Ach ja: WENN crc() schon eine Memberfunktion von &quot;berta&quot; ist, ha sie doch sowieso Zugriff auf die Member feldeins und feldzwei .... warum noch separat übergeben ?</p>
</blockquote>
<p>Weil ich alleine durch die Größe der Übergabeparameter entscheiden will was crc macht. Hab ja nur das problem mit sizeof()<br />
Ich will einfach keine zusätzlichen ÜP einführen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339643</guid><dc:creator><![CDATA[traceman]]></dc:creator><pubDate>Mon, 06 Aug 2007 14:57:45 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof in einer unterfunktion on Mon, 06 Aug 2007 15:23:21 GMT]]></title><description><![CDATA[<p>traceman schrieb:</p>
<blockquote>
<p>eben nicht!!!... crc liefert 1 und haupt liefert 4......(byte)....</p>
</blockquote>
<p>Seltsam, bei mir nicht:</p>
<pre><code class="language-cpp">struct berta {
 int feldeins[10];
 int feldzwei[20];

 void crc(int *);
 void haupt();
};  

void berta::haupt() {
   printf(&quot;%d\n&quot;,sizeof(feldeins));
   crc(feldeins);
}  

void berta::crc(int *m) {
   printf(&quot;%d\n&quot;,sizeof(m));
}

int main () {
   berta b;
   b.haupt();

   return 0;
}
</code></pre>
<p>liefert wie erwartet:</p>
<pre><code>40
4
</code></pre>
<p>(bei mir ist offensichtlich ein int 4 Byte groß und ein Pointer auch)</p>
<p>Ach ja: Was ist &quot;ÜP&quot; ?</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339660</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 06 Aug 2007 15:23:21 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof in einer unterfunktion on Mon, 06 Aug 2007 15:40:25 GMT]]></title><description><![CDATA[<p>Schon mal danke das Du dir die Arbeit machst... so wie ich das nun verstehe gibt nun das Unterprogramm crc nicht mehr Gesamtgröße von feldeins aus sondern nur die Größe eines Pointers oder?</p>
<p>Kann man das irgendwie verhindern bzw. einen zusätzlichen Übergabeparameter (ÜP) vermeiden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339668</guid><dc:creator><![CDATA[traceman]]></dc:creator><pubDate>Mon, 06 Aug 2007 15:40:25 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof in einer unterfunktion on Mon, 06 Aug 2007 15:46:58 GMT]]></title><description><![CDATA[<p>traceman schrieb:</p>
<blockquote>
<p>Kann man das irgendwie verhindern bzw. einen zusätzlichen Übergabeparameter (ÜP) vermeiden?</p>
</blockquote>
<p>Klar, indem man nicht ein C-Array verwendet sondern einen C++-Datentyp ('std::vector' oder 'std::tr1::array').</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339673</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Mon, 06 Aug 2007 15:46:58 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof in einer unterfunktion on Mon, 06 Aug 2007 15:53:36 GMT]]></title><description><![CDATA[<p>Jetzt sind wir endlich am Punkt...!</p>
<pre><code>struct berta {
 vector&lt;int&gt; array
 array feldeins[10];
 array feldzwei[20];

 void crc(int *);
 void haupt();
};  

void berta::haupt() {
   printf(&quot;%d\n&quot;,sizeof(feldeins));
   crc(feldeins);
}  

void berta::crc(int *m) {
   printf(&quot;%d\n&quot;,sizeof(m));
}

int main () {
   berta b;
   b.haupt();

   return 0;
}
</code></pre>
<p>schau ma mal obs funktioniert...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339677</guid><dc:creator><![CDATA[traceman]]></dc:creator><pubDate>Mon, 06 Aug 2007 15:53:36 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof in einer unterfunktion on Mon, 06 Aug 2007 16:07:42 GMT]]></title><description><![CDATA[<p>traceman schrieb:</p>
<blockquote>
<p>...so wie ich das nun verstehe gibt nun das Unterprogramm crc nicht mehr Gesamtgröße von feldeins aus sondern nur die Größe eines Pointers oder?...</p>
</blockquote>
<p>Japp ! Du erhältst auch denselben Wert, wenn Du sizeof() auf einen &quot;MyBigObject*&quot; machst. <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>
<p>traceman schrieb:</p>
<blockquote>
<p>...<br />
Kann man das irgendwie verhindern bzw. einen zusätzlichen Übergabeparameter (ÜP) vermeiden?</p>
</blockquote>
<p>Mir fallen spontan 3 Möglichkeiten ein:<br />
a) &quot;verstecken 1&quot; (elegant): Nimmst Du statt der int[] lieber std::vector&lt;int&gt;, dann merkt der sich das für Dich:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using std::cout;
#include &lt;vector&gt;

struct berta {
   vector&lt;int&gt; feldeins, feldzwei;
   berta() : feldeins(10),  feldzwei(20) {}

   void crc(vector&lt;int&gt;&amp;);
   void haupt();
};  

void berta::haupt() {
   cout &lt;&lt; feldeins.size()*sizeof(int) &lt;&lt; &quot;\n&quot;; // falls Du nur die Anzahl der Elemente brauchst und nicht die Größe in Byte,
      // brauchst Du nur das &quot;sizeof(int) wegzulassen.
   crc(feldeins);
}  

void berta::crc(vector&lt;int&gt;&amp; m)
   cout &lt;&lt; m.size()*sizeof(int) &lt;&lt; &quot;\n&quot;;
}
</code></pre>
<p>(habe mal ein wenig C raus und &quot;++&quot; reingenommen <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>b) &quot;verstecken 2&quot; (hässlich): Hier hast Du keinen <em>zusätzlichen</em>, sondern einen <em>anderen</em> Übergabeparameter (...ähhh &quot;ÜP&quot; <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>
<pre><code class="language-cpp">struct berta {
 int feldeins[10];
 int feldzwei[20];

 void crc(size_t feldNummer);
 void haupt();
};  

void berta::haupt() {
   crc(1);
}  

void berta::crc(size_t feldNummer) {
   size_t feldGroesse;
   switch(feldNummer) {
   case 1: feldGroesse = sizeof(feldeins); break;
   case 2: feldGroesse = sizeof(feldzwei); break;
   default: throw runtime_error(&quot;gaaaanz unschön&quot;);
   }
   // ...
}
</code></pre>
<p>3.) &quot;Typunterschied bei Referenzen ausnutzen&quot;: Das ist wohl ein wenig oversized</p>
<pre><code class="language-cpp">typedef int shortField[10];
typedef int longField[20];

struct berta {
 shortField feldeins;
 longField feldzwei;

 void crc(shortField&amp;);
 void crc(longField&amp;);
 void haupt();
};  

void berta::haupt() {
   printf(&quot;%d\n&quot;,sizeof(feldeins));
   crc(feldeins);
   crc(feldzwei);
}  

void berta::crc(shortField&amp; m) {
   cout &lt;&lt; &quot;crc(shortField&amp;): &quot; &lt;&lt; sizeof(m) &lt;&lt; &quot;\n&quot;;
}   
void berta::crc(longField&amp; m) {
   cout &lt;&lt; &quot;crc(longField&amp;): &quot; &lt;&lt; sizeof(m) &lt;&lt; &quot;\n&quot;;
}
</code></pre>
<p>Gibt auch noch ne &quot;templatisierter Variante&quot;...</p>
<p>Ich würde entweder den einen Parameter mehr spendieren oder eben mit vector arbeiten.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339681</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 06 Aug 2007 16:07:42 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof in einer unterfunktion on Mon, 06 Aug 2007 15:59:38 GMT]]></title><description><![CDATA[<p>traceman schrieb:</p>
<blockquote>
<p>...</p>
<pre><code>struct berta {
 vector&lt;int&gt; array
 array feldeins[10];
 array feldzwei[20];
...
</code></pre>
<p>schau ma mal obs funktioniert...</p>
</blockquote>
<p>Bestimmt nicht (jedenfalls nicht so, wie Du's haben möchtest <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="😉"
    /> ).<br />
Mal vom fehlenden &quot;;&quot; abgesehen:</p>
<pre><code class="language-cpp">vector&lt;int&gt; array // definiert keinen &quot;Typ&quot;, sondern eine Variable namens &quot;array&quot;
=&gt; 
 typedef vector&lt;int&gt; array;

 array feldeins[10]; // definiert feldeins als CArray von 10 vectoren !!
...
</code></pre>
<p>Naja, mein Beispiel oben zeigt Dir, wie's geht.</p>
<p>Ach ja: Benutze doch bitte nicht die &quot;code&quot;-, sondern die &quot;cpp&quot;-Tags, die machen uns das Lesen leichter.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339685</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 06 Aug 2007 15:59:38 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof in einer unterfunktion on Mon, 06 Aug 2007 16:03:34 GMT]]></title><description><![CDATA[<p>aber hallo jetzt krachts aber...jo werd mich mal mit dem vector bedienen wenns noch was gibt schrei ich einfach <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>many thx!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339688</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339688</guid><dc:creator><![CDATA[traceman]]></dc:creator><pubDate>Mon, 06 Aug 2007 16:03:34 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof in einer unterfunktion on Mon, 06 Aug 2007 16:06:15 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">aye!
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1339692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339692</guid><dc:creator><![CDATA[traceman]]></dc:creator><pubDate>Mon, 06 Aug 2007 16:06:15 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof in einer unterfunktion on Mon, 06 Aug 2007 16:11:26 GMT]]></title><description><![CDATA[<p>traceman schrieb:</p>
<blockquote>
<pre><code class="language-cpp">aye!
</code></pre>
</blockquote>
<p>Recht so ! <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>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339696</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339696</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 06 Aug 2007 16:11:26 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof in einer unterfunktion on Tue, 07 Aug 2007 02:40:10 GMT]]></title><description><![CDATA[<p>traceman schrieb:</p>
<blockquote>
<pre><code class="language-cpp">aye!
</code></pre>
</blockquote>
<p>Arrr!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339873</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 07 Aug 2007 02:40:10 GMT</pubDate></item></channel></rss>