What is the difference between args and args?

Here is my snip code

    #include <stdio.h>

    void change(int a[]){
        printf("%p\n",&a);
    }

   int main(){
       int b[] = {1,2} ;
       printf("%p\n",&b);
       change(b);
       return 0;
   }

I run it and it gets the result following

    0x7fff5def1c60
    0x7fff5def1c38

As we can see, the actual parameter address deviates from the formal parameter address. Then I edited the following

    #include <stdio.h>

    void change(int a[]){
        printf("%p\n",a);
    }

    int main(){
        int b[] = {1,2} ;
        printf("%p\n",b);
        change(b);
        return 0;
    }

Then i get the results

    0x7fff56501c60
    0x7fff56501c60

So, it seems that the actual parameter and the formal parameter have the same address. I am confused by what is different between & a and a (a is an array), and why am I getting a different address from the first fragment? Thank!

+4
source share
5 answers

Because I do not think that the answers still emphasize this enough, I will give one more answer:

There is no difference between band &bif b- an array. , 100%. - , , . , p, - . p , . :  - p &p  - p p  - p *p

ar . , , ! , , , , . ar "" , - ; ar - . , :  - ar &ar ar  - ar ar[0]

change int a[] int *a, int b[] int *b. , b - , .

main, b = some_pointer, change - - , , , , - , , .

, , &b b. b , - b .

+1

:

printf("%p\n",&b);

.

:

change(b);

:

void change(int a[]){
    printf("%p\n",&a);
}

a, . :

void change(int* a){
    printf("%p\n",&a);
}

, :

void change(int* a){
    printf("%p\n", a);
    //            ^^
}
+4

, a - , array[1, 2]. , a - , . , - . , &a - a. , &a array[1,2].

b change, a b. &a - a, a. .

+2

main(), b - , , , &b .

change(), a - , . &a - .

& .

C11:

6.5.3 , pt 3: .

6.7.6.3 , pt 7: '' '' , ( ) , [] .

+1

"&" , "% p" printf .

main() :

    printf("%p\n",b);
    printf("%p\n",&b);

b, 0x7fff56501c60

, a:

void change(int a[]){

( int * a) .

:

    printf("%p\n",a);

, : b: b a, printf , .

:

    printf("%p\n",&a);

a, b. , a b "change", :

#include <stdio.h>

void change(int a[]){
    printf("%p\n",&a);
}

int main(){
   int b[] = {1,2} ;
   printf("%p\n",&b);
   change((int *)0);
   return 0;
}

"" Nullpointer - : "change" a, .

0

All Articles