Re: gcc not compiling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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...]

-- 
Derek D. Martin
http://www.pizzashack.org/
GPG Key ID: 0x81CFE75D

Attachment: pgpBamxTTbHLx.pgp
Description: PGP signature


[Index of Archives]     [Current Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]     [Fedora Docs]

  Powered by Linux