&符号是取地址符,任何变量都可以使用&来获取地址,但不能用在常量上

struct Point
{
    int x;
    int y;
};
char a;
short b;
int c;
Point p;
printf("%p %p %p %p \n",&a,&b,&c,&p);
printf("%x %x %x %x \n",&a,&b,&c,&p);
printf("%x \n",&10);
16:       char a;
17:       short b;
18:       int c;
19:       Point p;
20:
21:       printf("%p %p %p %p \n",&a,&b,&c,&p);
0040D408   lea         eax,[ebp-14h]
0040D40B   push        eax
0040D40C   lea         ecx,[ebp-0Ch]
0040D40F   push        ecx
0040D410   lea         edx,[ebp-8]
0040D413   push        edx
0040D414   lea         eax,[ebp-4]
0040D417   push        eax
0040D418   push        offset string "%p %p %p %p \n" (00422e90)
0040D41D   call        printf (0040d6c0)
0040D422   add         esp,14h
22:       printf("%x %x %x %x \n",&a,&b,&c,&p);
0040D425   lea         ecx,[ebp-14h]
0040D428   push        ecx
0040D429   lea         edx,[ebp-0Ch]
0040D42C   push        edx
0040D42D   lea         eax,[ebp-8]
0040D430   push        eax
0040D431   lea         ecx,[ebp-4]
0040D434   push        ecx
0040D435   push        offset string "%x %x %x %x \n" (00422e80)
0040D43A   call        printf (0040d6c0)
0040D43F   add         esp,14h

探测 & 变量的类型

char a;
short* b;
int** c;
int x = &a;
int x = &b;
int x = &c;
以上代码全都无法编译成功

说明 使用了 &符号后 将会生成 &符号后类型的指针(加一个*)

指针变量赋值

char x;
char* p1;
char** p2;
char*** p3;
char**** p4;
p1=&x;
p2=&p1;
p3=&p2;
p4=&p3;
p1 = (char*)p4;