l i n u x - u s e r s - g r o u p - o f - d a v i s
Next Meeting:
July 7: Social gathering
Next Installfest:
Latest News:
Jun. 14: June LUGOD meeting cancelled
Page last updated:
2010 Feb 28 21:00

The following is an archive of a post made to our 'vox mailing list' by one of its subscribers.

Report this post as spam:

(Enter your email address)
Re: [vox] things that really suck about C!
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [vox] things that really suck about C!

Hi Brian,

Sounds like you are the path to a true religious experience! ;D

mod_array() also receives a pass-by-value argument. ;) C copies the pointer. Variable int b[CAP] is really syntactic sugar for int * b. And so is mod_array()'s formal parameter int a[], which is the same as int * a. So the actual and formal parameters match up. And since you are changing what the pointer points to, all is well when the function returns.

However, if you pass an array (say, int a[]) into a function, and then attempt to change what variable a points to, it will last only as long as you are in the function, because a is a copy of the original pointer. For example, a = calloc(4, sizeof(char));. When the function ends, variable a is deleted, control returns to main(), and pointer b still points to its original contents. To get around this, you need to pass a pointer to a pointer into the function (int **b). :P

I am likely proving your point about C being a detriment to the field! ;D Let us know if/when you have a true Lisp epiphany. :) I hear it is quite a revolution in thinking!

On Sun, Feb 28, 2010 at 6:35 PM, Brian Lavender <brian@brie.com> wrote:
I think if anything, C has been a certain detriment to the field of
computer science!

One calls a function and the arguments are passed by value. Call a
function with an array as an argument, and feel free to modify its

Certainly, C++ added the idea of reference, but I think Pascal
simplifies these concepts much better. Yet, Pascal seems to be relegated
to the status as a legacy language!


#include <stdio.h>

#define CAP 10

void mod_array(int a[])
 a[2] = 5;

void trychange(int a)
 a = 2;

void reallychange(int *a)
 *a = 2;

int main() {
 int b[CAP];
 int c;
 int i;

 printf("Load array and change a value\n");
 for (i=0; i < CAP; i++)
   b[i] = i + 20;


 for (i=0; i < CAP; i++)
   printf("b[%d] has value of %d\n",i,b[i]);

 c = 10;

 printf("c has a value of %d\n",c);

 printf("c has a value of %d after trychange(c)\n",c);


 printf("c has a value of %d after reallychange(&c)\n",c);


Brian Lavender

"There are two ways of constructing a software design. One way is to
make it so simple that there are obviously no deficiencies. And the other
way is to make it so complicated that there are no obvious deficiencies."

Professor C. A. R. Hoare
The 1980 Turing award lecture
vox mailing list

vox mailing list

LUGOD Group on LinkedIn
Sign up for LUGOD event announcements
Your email address:
LUGOD Group on Facebook
'Like' LUGOD on Facebook:

Hosting provided by:
Sunset Systems
Sunset Systems offers preconfigured Linux systems, remote system administration and custom software development.

LUGOD: Linux Users' Group of Davis
PO Box 2082, Davis, CA 95617
Contact Us

LUGOD is a 501(c)7 non-profit organization
based in Davis, California
and serving the Sacramento area.
"Linux" is a trademark of Linus Torvalds.

Sponsored in part by:
O'Reilly and Associates
For numerous book donations.