指针经典程序——互换两个数字

作者在 2011-09-05 11:39:46 发布以下内容
/*
时间:2011年9月5日11:38:08
目的:通过经典的指针程序,互换两个数字,掌握函数中指针的用法
*/
# include <stdio.h>

void huhuan1 (int, int);        //对函数前置声明,一般声明的时候不写形参
void huhuan2 (int*,int*);
void huhuan3 (int*,int*);

int main (void)
{
    int a = 3;
    int b = 5;
    
    huhuan1 (a,b);                        //程序执行到这里后调用函数,为形参a\b分配内存空间,当函数调用完后,会释放形参a、b的空间,形参a、b不复存在
    printf("a = %d, b = %d\n",a,b);        //运行的结果是a = 3, b = 5。所以huhuan1没能互换两个数字
    
    
//huhuan2 (a,b);                    //这样写会报错,error C2664: 'huhuan2' : cannot convert parameter 1 from 'int' to 'int *'
    
//huhuan2 (*p, *q);                    //当然更不能这样写,因为主函数里根本就没定义p和q,报错error C2065: 'p' : undeclared identifier
    huhuan2 (&a, &b);                    //函数huhuan2中定义的形参是指针变量p、q,指针变量存放的是变量的地址。所以定义实参应该对a、b取地址
    printf("a = %d, b = %d\n",a,b);        //运行的结果是a = 3, b = 5。所以huhuan2还是没能互换两个数字

    huhuan3 (&a, &b);
    printf("a = %d, b = %d\n",a,b);        //运行的结果是a = 5, b = 3。所以huhuan3能够互换两个数字
    return 0;
}

void huhuan1 (int a, int b)
{
    int t;
    
    t = a;            //这里互换的是huhuan1函数中的形参a,b。对主函数的a、b没有影响
    a = b;
    b = t;

    return;
}

void huhuan2 (int * p, int * q)        //互换2使用指针
{
    int * t;        //打算互换的p、q是int*类型,所以t必须定义成int *,如果定义成int会报错error C2440: '=' : cannot convert from 'int *' to 'int'

    t = p;            //这里互换的是p和q的内容,即互换后p中存放了b的地址,q中存放了a的地址。但互换后a、b对应的地址本身并不变化
    p = q;            
    q = t;

    return;
}

void huhuan3 (int * p, int * q)
{
    int t;            //打算互换的*p、*q是int型的,所以t必须定义成int型,定义成int*会报错error C2440: '=' : cannot convert from 'int' to 'int *'

    t = *p;            //这里互换的是p、q分别指向的变量的内容,即将a和b的值互换了
    *p = *q;        
    *q = t;

    return;
}
郝斌视频笔记 | 阅读 1153 次
文章评论,共0条
游客请输入验证码
最新评论