> On Mon, Oct 31, 2005 at 01:30:44PM -0600, STYMA, ROBERT E (ROBERT) wrote: > > The syntax: > > int main(int argc, char **argv) > > works, but most of the C books I have seen recommend > > the *argv[] version. > > I meant to comment that these two different notations are functionally > identical; an array name is nothing more than a pointer. For example, > if we have the following code: > > #include <stdio.h> > void main (void){ > > char foo[] = "This is a string\n"; > char *bar = foo; > > /* these expressions all print "T\n" */ > printf("%c\n", foo[0]); > printf("%c\n", *bar); > printf("%c\n", bar[0]); > printf("%c\n", *foo); > > /* these expressions all print "i\n" */ > printf("%c\n", foo[2]); > printf("%c\n", *(bar + 2)); > printf("%c\n", bar[2]); > printf("%c\n", *(foo + 2)); > } > > The results may surprise programming students: > > $ gcc -o ptr ptr.c > ptr.c: In function `main': > ptr.c:2: warning: return type of 'main' is not `int' > [ddm@archonis ~] > $ ./ptr > T > T > T > T > i > i > i > i > > > In reality, foo[x] is just "syntactic sugar" for *(foo + x). This > is called pointer math, and works properly regardless of the size and > type of foo, so long as it was declared properly before being used. > > [I'm very bored today...] BTW, this is only for the benefit of the original poster. Maybe he will remember this tidbit when the prof gets to parameters and arrays. I agree, char **a, and char *a[] are equivalent. It only a style issue. Students sometimes take this too literally can can get in trouble. The equivalency is really only in parameter passing because arrays are passed as the address of the array. That effectively results in pass by reference instead of pass by value for the array. >From a lecture I used to give (titled: C Gun, Bullet, and Foot): file1.c char external_str[20] = "hello world"; file2.c extern char *external_str; "If you were to link these two files together and then access via the reference in file2.c, the generated code would take the first 4 bytes of the string, assume they were and address, and attempt to go there and get the data. And that would be exactly where your program would go." That last line would always get a chuckle after about 5 seconds. Bob Styma