摘要
&符号是取地址符,任何变量都可以使用&来获取地址,但不能用在常量上说明 使用了 &符号后 将会生成 &符号后类型的指针(加一个*)
&符号是取地址符,任何变量都可以使用&来获取地址,但不能用在常量上
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;