At 01:26 PM 3/10/99 -0500, you wrote:
>If I understand correctly, char s1[]= "Hello"; puts that array of characters
>(plus the NULL) on the stack. Could I then execute something like
>printf("%s", s1) and have it print Hello? If true, when that printf runs,
>how does it know which bytes to pull off the stack. I might have added
>additional things to the stack, so how does it know where to find it if
>there is no pointer to it? If I could understand that, I'd really be getting
>somewhere. Thanks.
Mitch,
This gets into the nature of 'C' arrays; 'C' arrays *are* pointers.
Let's say we have the following declarations:
char s1[] = "Hello";
char* sP = s1;
sP and s1 are both pointers to the same memory (the 'H'). We can mostly
use s1 and sP as equivalents:
(*s1) = 'G'; s1 [0] = 'G'; (*sP) = 'G'; sP [0] = 'G';
All these expressions do the exact same thing - they change the first
letter of the string to 'G'. In the same way, we can say:
*(s1+1) = 'o'; s[1] = 'o'; *(sP+1) = 'o'; sP [1] = '0';
Again, here s1 and sP can both be used as "arrays" or "pointers". We can
pass s1 to *any* function that takes a string pointer:
StrCopy (s1, "Dog");
StrCopy (sP, "Cat");
We can even legally do really bad things:
*(s1+20) = '\0'; // This will probably crash the program at some point.
StrCopy (s1, "Goodbye"); // So will this
The only thing we can't do with s1 that we can do with sP is to change what
it points to:
char s2 = "Goodbye";
sP = s2; // this is legal
s1 = s2; // this is not - the compiler will object.
Effectively, what s1 really represents is a constant pointer to
non-constant data. The fact that the data is not constant is what causes
it to be allocated on the stack - the application *must* be able to change
it. It is the "const-ness" of the data you point to that determines where
it is stored.
Hope this helps.
Regards,
Greg
Greg Winton
Bachmann Software and Services, LLC
mailto:[EMAIL PROTECTED]
http://www.bachmannsoftware.com
Software Development for Handheld & Mobile Computing, Windows and the Internet
Home of Bachmann Print Manager, the only graphical printing solution for
the Palm Computing Platform