作者在 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;
}
时间: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;
}