"Address of" (&) an array / address of being ignored be gcc?

Posted by dbarbosa on Stack Overflow See other posts from Stack Overflow or by dbarbosa
Published on 2010-05-23T23:19:45Z Indexed on 2010/05/23 23:31 UTC
Read the original article Hit count: 187

Filed under:
|
|
|

Hi, I am a teaching assistant of a introductory programming course, and some students made this type of error:

char name[20];
scanf("%s",&name);

which is not surprising as they are learning... What is surprising is that, besides gcc warning, the code works (at least this part). I have been trying to understand and I wrote the following code:

void foo(int *str1, int *str2) {
  if (str1 == str2)
    printf("Both pointers are the same\n");
  else
    printf("They are not the same\n");
}

int main() {
  int test[50];
  foo(&test, test);
  if (&test == test)
    printf("Both pointers are the same\n");
  else
    printf("They are not the same\n");
}

Compiling and executing:

$ gcc test.c -g
test.c: In function ‘main’:
test.c:12: warning: passing argument 1 of ‘foo’ from incompatible pointer type
test.c:13: warning: comparison of distinct pointer types lacks a cast
$ ./a.out 
Both pointers are the same
Both pointers are the same

Can anyone explain why they are not different?

I suspect it is because I cannot get the address of an array (as I cannot have & &x), but in this case the code should not compile.

© Stack Overflow or respective owner

Related posts about c

    Related posts about gcc