Richard Cobbe wrote: > C: > int x; > > x = "foo"; > > You'll get a type error here at compile time, for obvious reasons. > Question: how can this be a type error if only variables have types? > You need to realize that "foo" has type (const) char * before you can > determine that you can't assign it to an int.
"foo" isn't a pointer to char (char*); it's an array of char (char[]). Consider: int main() { char* p = "foobar"; printf("sizeof pointer = %d\n", sizeof(p)); printf("sizeof array = %d\n", sizeof("foobar")); return 0; } This produces the following output: sizeof pointer = 4 sizeof array = 7 (The array has size 7 because the string literal automatically gets a null appended to its six elements.) This is a nitpicky point, and not one which invalidates the rest of your argument, but it is a common error of novice C programmers not to understand the difference between arrays and pointers (which the language makes confusing by passing arrays by reference and allowing the array-index operator to be applied to pointers), so when this sort of thing pops up, I like to point it out. Craig
pgpaUmL34K0nP.pgp
Description: PGP signature