<br><br><div class="gmail_quote">On Sun, Feb 28, 2010 at 6:35 PM, Brian Lavender <span dir="ltr">&lt;<a href="mailto:brian@brie.com">brian@brie.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I think if anything, C has been a certain detriment to the field of<br>
computer science!<br>
<br>
One calls a function and the arguments are passed by value. Call a<br>
function with an array as an argument, and feel free to modify its<br>
contents!<br>
<br></blockquote><div>so declaring an array as const prevents this, func(const double * a).  I understand that this also helps the compiler make optimizations it cannot do when you don&#39;t use const.  I think you could still modify the contents of the array by first copying the pointer though,<br>
<br>double * b = a;<br>b[i] = something new.<br><br>So there&#39;s also the modifier &quot;restrict&quot;, which I believe would prevent this, and again helps out the compiler do smart things.  Others can probably confirm/correct this?  Is it good practice to use these modifiers as often as possible/appropriate?<br>
 </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Certainly, C++ added the idea of reference, but I think Pascal<br>
simplifies these concepts much better. Yet, Pascal seems to be relegated<br>
to the status as a legacy language!<br>
<br>
brian<br>
<br>
<br>
#include &lt;stdio.h&gt;<br>
<br>
#define CAP 10<br>
<br>
void mod_array(int a[])<br>
{<br>
  a[2] = 5;<br>
}<br>
<br>
void trychange(int a)<br>
{<br>
  a = 2;<br>
}<br>
<br>
void reallychange(int *a)<br>
{<br>
  *a = 2;<br>
}<br>
<br>
int main() {<br>
  int b[CAP];<br>
  int c;<br>
  int i;<br>
<br>
  printf(&quot;Load array and change a value\n&quot;);<br>
  for (i=0; i &lt; CAP; i++)<br>
    b[i] = i + 20;<br>
<br>
<br>
  mod_array(b);<br>
<br>
  for (i=0; i &lt; CAP; i++)<br>
    printf(&quot;b[%d] has value of %d\n&quot;,i,b[i]);<br>
<br>
  c = 10;<br>
<br>
  printf(&quot;c has a value of %d\n&quot;,c);<br>
  trychange(c);<br>
<br>
  printf(&quot;c has a value of %d after trychange(c)\n&quot;,c);<br>
<br>
  reallychange(&amp;c);<br>
<br>
  printf(&quot;c has a value of %d after reallychange(&amp;c)\n&quot;,c);<br>
<br>
<br>
}<br>
<br>
--<br>
Brian Lavender<br>
<a href="http://www.brie.com/brian/" target="_blank">http://www.brie.com/brian/</a><br>
<br>
&quot;There are two ways of constructing a software design. One way is to<br>
make it so simple that there are obviously no deficiencies. And the other<br>
way is to make it so complicated that there are no obvious deficiencies.&quot;<br>
<br>
Professor C. A. R. Hoare<br>
The 1980 Turing award lecture<br>
_______________________________________________<br>
vox mailing list<br>
<a href="mailto:vox@lists.lugod.org">vox@lists.lugod.org</a><br>
<a href="http://lists.lugod.org/mailman/listinfo/vox" target="_blank">http://lists.lugod.org/mailman/listinfo/vox</a><br>
</blockquote></div><br><br clear="all"><br>-- <br>Carl Boettiger<br>Population Biology, UC Davis<br><a href="http://two.ucdavis.edu/~cboettig">http://two.ucdavis.edu/~cboettig</a><br>