I come, I see, I conquer

                    —Gaius Julius Caesar

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

以下代码在VC环境下运行:

#include <stdio.h>

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位机)

 

posted on 2008-09-16 20:34  jcsu  阅读(485)  评论(0编辑  收藏  举报