<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>How to swap static array pointers in c++?</title>
		<link>http://www.allegro.cc/forums/view/451894</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 21 Jan 2005 17:13:05 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Don&#39;t laugh at the easy looking question before you try out your solution yourself.</p><p>A friend of mine made a program that used two char arrays in turns(something like doublebuffering). To swap them he used memcpy. I suggested him to use pointer swapping to speed things up considerably but he told it didn&#39;t work. Well, it&#39;s true. Code like this doesn&#39;t work:
</p><div class="source-code snippet"><div class="inner"><pre> <span class="k1">char</span> state<span class="k2">[</span><span class="n">256</span><span class="k2">]</span><span class="k2">;</span>
 <span class="k1">char</span> lastState<span class="k2">[</span><span class="n">256</span><span class="k2">]</span><span class="k2">;</span>
 <span class="k1">char</span> <span class="k3">*</span>tmp<span class="k2">;</span>

 lastState<span class="k3">=</span>state<span class="k2">;</span><span class="c">//error: ISO C++ forbids assignment of arrays</span>
 state<span class="k3">=</span>tmp<span class="k2">;</span><span class="c">///usr/katsepolygon/cpp/coop/tehas/src/tehas.cpp:134: error: incompatible types in assignment of `char*' to `char[256]'</span>
</pre></div></div><p>It looks allmost perfect(tmp is not of type char[256]) but it doesn&#39;t work. </p><p>My guess is that it&#39;s practically impossible to swap two arrays of this kind. What do you think?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (HoHo)</author>
		<pubDate>Fri, 21 Jan 2005 04:40:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You cannot pass one array to another array just like that. What you can do is point the pointer to one buffer, and when needed point to another, and use the pointer instead of the buffers. But you won&#39;t be changing the information in the buffers, just the current buffer.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ReyBrujo)</author>
		<pubDate>Fri, 21 Jan 2005 04:47:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>some code that does this would be helpful. Everything I have tried haven&#39;t worked
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (HoHo)</author>
		<pubDate>Fri, 21 Jan 2005 04:53:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In C (and C++) you can&#39;t directly assign arrays or structures. Hence, you can use memcpy() or manually swap each char (which is what memcpy() basically does, but probably it swaps as many bytes as it can per cycle, to speed things up <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />)</p><p>[edit] Beaten <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /><br />[edit2] I should correct myself: in C you can directly assign structures <img src="http://www.allegro.cc/forums/smileys/rolleyes.gif" alt="::)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Marco Radaelli)</author>
		<pubDate>Fri, 21 Jan 2005 05:00:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This won&#39;t work (and it&#39;s illegal):</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">char</span> state<span class="k2">[</span>size<span class="k2">]</span><span class="k2">;</span>
<span class="k1">char</span> lastState<span class="k2">[</span>size<span class="k2">]</span><span class="k2">;</span>
<span class="k1">char</span> <span class="k3">*</span>temp<span class="k2">;</span>

temp <span class="k3">=</span> state<span class="k2">;</span>
state <span class="k3">=</span> lastState<span class="k2">;</span>
lastState <span class="k3">=</span> temp<span class="k2">;</span>
</pre></div></div><p>

You want this:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">char</span> buf1<span class="k2">[</span>size<span class="k2">]</span><span class="k2">;</span>
<span class="k1">char</span> buf2<span class="k2">[</span>size<span class="k2">]</span><span class="k2">;</span>
<span class="k1">char</span> <span class="k3">*</span>handle<span class="k2">;</span>
<span class="k1">if</span> <span class="k2">(</span>some_condition<span class="k2">)</span>
  handle <span class="k3">=</span> buf1<span class="k2">;</span> <span class="c">/* buf1 is the active buffer */</span>
<span class="k1">else</span>
  handle <span class="k3">=</span> buf2<span class="k2">;</span>  <span class="c">/* buf2 is the active buffer */</span>
process_data<span class="k2">(</span>handle<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Rampage)</author>
		<pubDate>Fri, 21 Jan 2005 05:03:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The sentence &#39;lastState=state&#39; fails because lastState and state are const pointers (not just simple pointers).<br />You are trying to copy const pointers not the array data.<br />Take a look to std::vector&lt;&gt;.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (lucaz)</author>
		<pubDate>Fri, 21 Jan 2005 05:05:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><b>Jorram</b>, that&#39;s pretty much the same way I have used things before(the second example). I assumed that it works the same on statically defined arrays too.</p><p>If these pointers are const pointers then that makes perfect sense. I wonder why I haven&#39;t seen it written in any books or tutorials.</p><p>I use statically defined arrays very rearely and almost always use dynamic ones or stl containers. That&#39;s why I haven&#39;t had such problems before.</p><p>Thanks everybody.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (HoHo)</author>
		<pubDate>Fri, 21 Jan 2005 05:17:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This is the fastest way I know of doing that:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#include &lt;stdio.h&gt;</span></td></tr><tr><td class="number">2</td><td><span class="p">#include &lt;conio.h&gt;</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">5</td><td><span class="k2">{</span></td></tr><tr><td class="number">6</td><td>  <span class="k1">char</span> szBuff1<span class="k2">[</span><span class="n">256</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">"Hello\n"</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>  <span class="k1">char</span> szBuff2<span class="k2">[</span><span class="n">256</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">"World\n"</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>  <span class="k1">char</span><span class="k3">*</span> szCurrent <span class="k3">=</span> szBuff1<span class="k2">;</span></td></tr><tr><td class="number">9</td><td>  <span class="k1">int</span> dwSum <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>szBuff1<span class="k3">+</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>szBuff2<span class="k2">;</span></td></tr><tr><td class="number">10</td><td>&#160;</td></tr><tr><td class="number">11</td><td>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%s"</span>, szCurrent<span class="k2">)</span><span class="k2">;</span> <span class="c">// Hello</span></td></tr><tr><td class="number">12</td><td>  szCurrent <span class="k3">=</span> <span class="k2">(</span><span class="k1">char</span><span class="k3">*</span><span class="k2">)</span><span class="k2">(</span>dwSum-<span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>szCurrent<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>&#160;</td></tr><tr><td class="number">14</td><td>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%s"</span>, szCurrent<span class="k2">)</span><span class="k2">;</span> <span class="c">// World</span></td></tr><tr><td class="number">15</td><td>  szCurrent <span class="k3">=</span> <span class="k2">(</span><span class="k1">char</span><span class="k3">*</span><span class="k2">)</span><span class="k2">(</span>dwSum-<span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>szCurrent<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>&#160;</td></tr><tr><td class="number">17</td><td>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%s"</span>, szCurrent<span class="k2">)</span><span class="k2">;</span> <span class="c">// Hello</span></td></tr><tr><td class="number">18</td><td>  szCurrent <span class="k3">=</span> <span class="k2">(</span><span class="k1">char</span><span class="k3">*</span><span class="k2">)</span><span class="k2">(</span>dwSum-<span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>szCurrent<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>&#160;</td></tr><tr><td class="number">20</td><td>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%s"</span>, szCurrent<span class="k2">)</span><span class="k2">;</span> <span class="c">// World</span></td></tr><tr><td class="number">21</td><td>  szCurrent <span class="k3">=</span> <span class="k2">(</span><span class="k1">char</span><span class="k3">*</span><span class="k2">)</span><span class="k2">(</span>dwSum-<span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>szCurrent<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td>&#160;</td></tr><tr><td class="number">23</td><td>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%s"</span>, szCurrent<span class="k2">)</span><span class="k2">;</span> <span class="c">// Hello</span></td></tr><tr><td class="number">24</td><td>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_383.html" target="_blank">getch</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td>&#160;</td></tr><tr><td class="number">26</td><td>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

Of course I&#39;m going to get a few replies suggesting that it is &quot;Dangerous Casting&quot;.;D
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Erkle)</author>
		<pubDate>Fri, 21 Jan 2005 05:28:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>If these pointers are const pointers then that makes perfect sense.</p></div></div><p>They arn&#39;t pointers. They are arrays, that pretend to look like pointers.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Fri, 21 Jan 2005 05:45:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In C an array <i>is</i> implemented as a const pointer and will act the same in <i>all</i> cases.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Erkle)</author>
		<pubDate>Fri, 21 Jan 2005 05:46:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>An array is a block of memory. Using the array name without fully derefencing it will implicitly give you a pointer. Check it:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> array<span class="k2">[</span><span class="n">23</span><span class="k2">]</span><span class="k2">[</span><span class="n">25</span><span class="k2">]</span><span class="k2">[</span><span class="n">24</span><span class="k2">]</span><span class="k2">;</span>
array <span class="k3">=</span><span class="k3">=</span> array<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> array<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="k3">&amp;</span>array<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span>
<span class="k3">&amp;</span>array<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="k3">&amp;</span>array<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="k3">&amp;</span>array<span class="k2">;</span>
</pre></div></div><p><img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Fri, 21 Jan 2005 06:25:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Using the array name without fully derefencing it will implicitly give you a pointer.
</p></div></div><p>

A pointer or a const pointer? <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (lucaz)</author>
		<pubDate>Fri, 21 Jan 2005 07:06:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>In C an array is implemented as a const pointer and will act the same in all cases.</p></div></div><p>Its still an array. and is NOT a pointer <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> You can treat it like a pointer in MOST cases, but not all.</p><p>Its best not to assume an array is a pointer, it&#39;ll just give you problems like these.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Fri, 21 Jan 2005 07:07:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I would say a pointer, because you can change their address if using ISO C99 flexible arrays.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ReyBrujo)</author>
		<pubDate>Fri, 21 Jan 2005 07:09:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>the array name is a const pointer to the block of memory.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (lucaz)</author>
		<pubDate>Fri, 21 Jan 2005 07:10:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>the compiler may give you a pointer, but an array is an array, now, the address of an array can be used in a pointer sure <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Fri, 21 Jan 2005 07:11:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>A pointer or a const pointer? <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /></p></div></div><p>
An implicit pointer, just like:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> var<span class="k2">;</span>
<span class="k3">&amp;</span>var<span class="k2">;</span> <span class="c">// this is implicit</span>
<span class="k1">int</span> array<span class="k2">[</span><span class="n">3</span><span class="k2">]</span><span class="k2">;</span>
array<span class="k2">;</span> <span class="c">// so is this</span>
</pre></div></div><p>It&#39;s a hard-coded value in the program code.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Fri, 21 Jan 2005 07:13:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Sell Allegro BITMAP structure. You have the <i>line</i> array name, which has an address when you create the structure. But then Allegro malloc&#39;s memory, and changes the array pointer to point another place. So, the array name is not a const member, because it can point to different block memories.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ReyBrujo)</author>
		<pubDate>Fri, 21 Jan 2005 07:14:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>Sell Allegro BITMAP structure. You have the line array name, which has an address when you create the structure. But then Allegro malloc&#39;s memory, and changes the array pointer to point another place. So, the array name is not a const member, because it can point to different block memories.</p></div></div><p>
No. Allegro&#39;s line pointer points to the end of the allocated structure. The struct itself doesn&#39;t allocate any memory.. Allegro does that itself.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Fri, 21 Jan 2005 07:20:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Sell Allegro BITMAP structure. You have the line array name, which has an address when you create the structure. But then Allegro malloc&#39;s memory, and changes the array pointer to point another place. So, the array name is not a const member, because it can point to different block memories.
</p></div></div><p>

As far as I know, the BITMAP line is pointer to a char pointer (char**) or an <s>empty</s> array of pointers to char (char* line[]) not a char* line[number].<br />In both cases, it is allocated dynamically.</p><p>EDIT: beaten <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (lucaz)</author>
		<pubDate>Fri, 21 Jan 2005 07:21:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I could have swear that allocating a 0 bytes array was valid as allocating a 1 byte array, based on the fact that malloc(0) returns a valid pointer. Seemly I am wrong, sorry <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ReyBrujo)</author>
		<pubDate>Fri, 21 Jan 2005 07:25:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Now I&#39;m confused <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />. I thought that the pointers are variables that contain the address of memory locations. A BITMAP* ptr has the address of a BITMAP, but the address of the BITMAP* ptr (&amp;ptr) is itself constant.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Rampage)</author>
		<pubDate>Fri, 21 Jan 2005 07:25:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Jorram, yes. BITMAP *ptr; &amp;ptr give you the hard-coded address of the BITMAP pointer, which is a variable pointer that points to a BITMAP struct.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>I could have swear that allocating a 0 bytes array was valid as allocating a 1 byte array, based on the fact that malloc(0) returns a valid pointer. Seemly I am wrong, sorry <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p></div></div><p>
Actually, that is right. However, you can&#39;t dereference anything returned by malloc(0) because the first byte you try to dereference is out of bounds. Allegro&#39;s line pointer is a static array of char* pointers.</p><p>EDIT: clarrification
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Fri, 21 Jan 2005 07:31:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>As far as I know:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">char</span> c <span class="k3">=</span> <span class="n">3</span><span class="k2">;</span>
<span class="k1">char</span><span class="k3">*</span> pc <span class="k3">=</span> <span class="k3">&amp;</span>c<span class="k2">;</span>

            Memory
Name        Address     Data
<span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span>      <span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span>      <span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span>
c           <span class="n">0x004A</span>  <span class="k3">-</span><span class="k3">&gt;</span>  <span class="n">0x0003</span>
<span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span>      <span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span>      <span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span>
pc          <span class="n">0x0058</span>  <span class="k3">-</span><span class="k3">&gt;</span>  <span class="n">0x004A</span>
<span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span>      <span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span>      <span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span>

<span class="k1">char</span><span class="k3">*</span> p<span class="k2">;</span>
<span class="k3">&amp;</span>c <span class="k3">=</span> p<span class="k2">;</span>   <span class="c">// error, you are trying to change the memory address of a non-pointer variable.</span>
</pre></div></div><p>

EDIT: beaten again!!! <img src="http://www.allegro.cc/forums/smileys/lipsrsealed.gif" alt=":-X" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (lucaz)</author>
		<pubDate>Fri, 21 Jan 2005 07:35:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>Its still an array. and is NOT a pointer <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> You can treat it like a pointer in MOST cases, but not all.</p></div></div><p>
I didn&#39;t say &quot;pointer&quot; I said &quot;const pointer&quot;:P.  If you look at all the cases where arrays aren&#39;t like pointers you&#39;ll find they do act like const pointers.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Erkle)</author>
		<pubDate>Fri, 21 Jan 2005 13:54:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Pointers and arrays are in fact the same thing in C(++). Dynamic and static arrays are not, and neither are const and non-const pointers. Look at this code:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">char</span> array1<span class="k2">[</span><span class="n">256</span><span class="k2">]</span><span class="k2">;</span>
<span class="k1">char</span> array2<span class="k2">[</span><span class="n">256</span><span class="k2">]</span><span class="k2">;</span>
<span class="k1">char</span><span class="k3">*</span> pointer1<span class="k2">;</span>

pointer <span class="k3">=</span> array1<span class="k2">;</span> <span class="c">// This is perfectly legal</span>
pointer<span class="k2">[</span><span class="n">15</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">'c'</span><span class="k2">;</span> <span class="c">// So is this - 'pointer' is an array, too</span>
array2 <span class="k3">=</span> array1<span class="k2">;</span> <span class="c">// This is not legal, because array2 is a static array (which is a const pointer).</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Fri, 21 Jan 2005 14:36:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Arrays and pointers are not the same. Arrays are just like regular variables except they imply a &amp; when you don&#39;t fully subscript them.
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> array<span class="k2">[</span><span class="n">128</span><span class="k2">]</span><span class="k2">;</span>
<span class="k1">int</span> <span class="k3">*</span>ptr <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k3">*</span><span class="n">128</span><span class="k2">)</span><span class="k2">;</span>

array <span class="k3">=</span><span class="k3">=</span> <span class="k3">&amp;</span>array<span class="k2">;</span>
ptr <span class="k3">!</span><span class="k3">=</span> <span class="k3">&amp;</span>ptr<span class="k2">;</span>

<span class="k2">(</span><span class="k3">&amp;</span>array<span class="k2">)</span><span class="k2">[</span><span class="n">96</span><span class="k2">]</span><span class="k2">;</span> <span class="c">// valid</span>
<span class="k2">(</span><span class="k3">&amp;</span>ptr<span class="k2">)</span><span class="k2">[</span><span class="n">96</span><span class="k2">]</span><span class="k2">;</span> <span class="c">// crash</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Fri, 21 Jan 2005 15:20:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Should it not be
</p><div class="source-code snippet"><div class="inner"><pre>array <span class="k3">=</span><span class="k3">=</span> <span class="k3">&amp;</span>array<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">;</span>
</pre></div></div><p>
<img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (tobing)</author>
		<pubDate>Fri, 21 Jan 2005 15:32:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Anyways, the reason why the original:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">char</span> state<span class="k2">[</span><span class="n">256</span><span class="k2">]</span><span class="k2">;</span>
<span class="k1">char</span> lastState<span class="k2">[</span><span class="n">256</span><span class="k2">]</span><span class="k2">;</span>
</pre></div></div><p>
can&#39;t work is that the compiler assumes that it knows the <i>exact</i> stack memory location for, say, state[50]. Then when you write something like:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> a <span class="k3">=</span> state<span class="k2">[</span><span class="n">50</span><span class="k2">]</span><span class="k2">;</span>
</pre></div></div><p>
the compiler can replace the state[50] with a dereference of a static stack memory address.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Fladimir da Gorf)</author>
		<pubDate>Fri, 21 Jan 2005 16:08:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>Should it not be<br />array == &amp;array[0];</p></div></div><p>
That&#39;s the thing. An array has no memory allocated for anything other than the array elements. array, &amp;array, and &amp;array[0] will all give you the same value, because the array address is not stored in memory (unlike a pointer which is.. even const pointers), thus you can&#39;t get a pointer to it. The compiler implcitily turns &#39;array&#39; into &#39;&amp;array&#39;, and the address of the array is the same as the address to the first element of the array.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>the compiler can replace the state[50] with a dereference of a static stack memory address.</p></div></div><p>
More than that, the compiler may not need to make a dereference at all.
</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// Case 1</span>
<span class="k1">int</span> a, b<span class="k2">;</span>
a <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
b <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>

<span class="c">// Case 2</span>
<span class="k1">int</span> a<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">;</span>
a<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
a<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
</pre></div></div><p>To the compiler, those two cases are exactly the same.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Fri, 21 Jan 2005 17:13:05 +0000</pubDate>
	</item>
</rss>
