C语言的函数传地址(25)

来源:互联网 发布:mac删除office2011 编辑:程序博客网 时间:2024/05/17 22:58

C语言的函数传地址:

特点:实参和行参共享一个存储单元,对行参的操作相应的就改变了实参,此时参数传递是双向的。

/************************************************************
 Copyright (C), 1998-2006, Rx. Co., Ltd.
 FileName: mainApp.cpp
 Author: longronglin
 Version : 1.0
 Date: 2006-10-06
 Description:      
 Function List:   
    1. int main()
 History:      
      <author> <time> <version > <desc>
      longronglin    2006/10/06     1.0      modify xxx . 
**********************************************************
*/


#include 
<stdio.h>

int abs(int *i)
{
    
*= *+ 1;

    
return (*i);
}

/*
 * 返回1为正确执行
 * 主函数
 *
 
*/


int main()
{
    
int a;
    
int b;

    printf(
"Please input a number:  ");
    scanf(
"%d"&a);

    b 
= abs(&a);
    
    printf(
"%d", a);

    
return (1);
}
  

 通过上面的测试可以发现a的内容同时也发生了改变。

程序分析:

1 a的地址为0x0012ff7c,假设存放2。

2 调用函数 此时i的地址为0x0012ff28。但是其内容由于是传地址。所以为7c。去除前面的偏移等。也就是a的地址。此时i=0x7c。*i就是取其地址对应的内容(2)。

3 此时*i对应的内容就是2。也就是取0x0012ff28对应的地址0x0012ff7c对应的内容2。*i=*i+1;就修改了0x0012ff7c的内容为3。

4 所以打印的结果也为3。

 

原创粉丝点击