以下代码在VC环境下运行:
void square( int * );
main( void )
{
int y = 10 ;
printf( " The original value of y is %d \n " , y);
square( &y );
printf( " The new value of y is %d \n " , y);
return 0 ;
}
void square( int * x)
{
* x = * x * * x;
}
step1. 运行完语句int y=10;后:
Name Value
+ &y 0x0012ff7c
&x CXX0017: Error: symbol "x" not found
Memory:
0012FF24 02 00 00 00 14 FE 41 00 83 00 00 .....嗀....
0012FF2F 00 00 00 00 00 00 00 00 00 00 90 ...........
0012FF3A FD 7F CC CC CC CC CC CC CC CC CC ?烫烫烫烫.
0012FF45 CC CC CC CC CC CC CC CC CC CC CC 烫烫烫烫烫.
0012FF50 CC CC CC CC CC CC CC CC CC CC CC 烫烫烫烫烫.
0012FF5B CC CC CC CC CC CC CC CC CC CC CC 烫烫烫烫烫.
0012FF66 CC CC CC CC CC CC CC CC CC CC CC 烫烫烫烫烫.
0012FF71 CC CC CC CC CC CC CC CC CC CC CC 烫烫烫烫烫.
0012FF7C 0A 00 00 00 C0 FF 12 00 39 11 40 ........9.@
0012FF87 00 01 00 00 00 70 0E 43 00 A0 0D .....p.C...
step2. 运行到语句* x = * x * * x;时:
Name Value
&y CXX0017: Error: symbol "y" not found
+ &x 0x0012ff2c "|"
Memory:
0012FF24 02 00 00 00 14 FE 41 00 7C FF 12 .....嗀....
0012FF2F 00 00 00 00 00 00 00 00 00 00 90 ...........
0012FF3A FD 7F CC CC CC CC CC CC CC CC CC ?烫烫烫烫.
0012FF45 CC CC CC CC CC CC CC CC CC CC CC 烫烫烫烫烫.
0012FF50 CC CC CC CC CC CC CC CC CC CC CC 烫烫烫烫烫.
0012FF5B CC CC CC CC CC CC CC CC CC CC CC 烫烫烫烫烫.
0012FF66 CC CC CC CC CC CC CC CC CC CC CC 烫烫烫烫烫.
0012FF71 CC CC CC CC CC CC CC CC CC CC CC 烫烫烫烫烫.
0012FF7C 0A 00 00 00 C0 FF 12 00 39 11 40 ........9.@
0012FF87 00 01 00 00 00 70 0E 43 00 A0 0D .....p.C...
注意:
1. 间接引用运算符*的优先级高于乘法运算*
2. 需要在被调用函数中修改参数值,应该给该函数传递参数的地址
3. 传递数组不需要使用运算符&,因为C自动传递数组起始内存单元的地址
4. 对于大对象的传递,使用指针能大大缩小复制的开销,要复制的只是4字节的内存(32位机)