Test code in below and I put the output info in comment. 
I was using gcc 4.8.5 and Centos 7.2.

```
#include <iostream>
#include <cstdio>

class C 
{
    public:
        void foo() {
            printf("%p, %p\n", &C::c, &(C::c)); // output value is 0x4, 0x7ffc2e7f52e8
            std::cout << &C::c << std::endl;    // output value is 1
        }
        int a;
        int c;
};

int main(void)
{
    C co;

    printf("%p\n", &C::c);              // output value is 0x4
    std::cout << &C::c << std::endl;    // output value is 1

//    printf("%p\n", &(C::c));   // compile error, invalid use of non-static data member 'C::c'

    co.foo();

    return 0;
}

```

1. According to [C++ operator Precedence](https://en.cppreference.com/w/cpp/language/operator_precedence)，the `::` operator has higher precedence than the `&` operator. I think `&C::c` is equal to `&(C::c)`, but the output says otherwise. Why are they different?
2. `&(C::c)` causes a compile error in main but not in the `foo` function，why is that?
3. The value of `&C::c` is different in `printf` and `std::cout`, why is that?