指针用来理解的例子
2016-08-18 08:35
113 查看
#include <stdio.h>
int main()
{
/*
int i = 10;
int* p;
printf("*p:\np=%d\t",p);
printf("*p=%d\n",*p);
*p = i;
printf("*p=i:\np=%d\t",p);
printf("*p=%d\t",*p);
printf("i=%d\n",i);
*p = &i;
printf("*p = &i:\np=%d\t",p);
printf("&i=%d\t",&i);
printf("*p=%d\t",*p);
printf("i=%d\n",i);
p = &i;
printf("p = &i:\np=%d\t",p);
printf("&i=%d\t",&i);
printf("*p=%d\t",*p));
printf("i=%d\n",i);
*/
void change1(int a,int b);
void change2(int* a,int* b);
void change3(int *a,int* b);
int *p1,*p2,*p,a,b,temp;
scanf("%d,%d",&a,&b);
p1=&a; p2=&b;
/*
if(a<b)
//{ p=p1; p1=p2; p2=p;}
{ temp=*p1; *p1=*p2; *p2=temp;}
*/
change1(a,b);
printf("change1--main函数中:a=%d,b=%d\n",a,b);
printf("change1--main函数中:*p1=%d,*p2=%d\n",*p1,*p2);
change2(p1,p2);
printf("change2--main函数中:a=%d,b=%d\n",a,b);
printf("change2--main函数中:*p1=%d,*p2=%d\n",*p1,*p2);
change3(&a,&b);
printf("change3--main函数中:a=%d,b=%d\n",a,b);
printf("change3--main函数中:*p1=%d,*p2=%d\n",*p1,*p2);
printf("max=%d,min=%d\n",*p1,*p2);
system("pause");
return 0;
}
//函数的值传递--传递的是参数的数值,
//在方法中,相当于一个副本使用,不影响函数外面的变量
void change1(int a,int b)
{ int temp = a;
a = b;
b = temp;
printf("change1中:a=%d,b=%d\n",a,b);
}
//使用指针(地址/引用)作为参数
void change2(int* a,int* b)
{ //使用临时指针,存储传递过来的指针,交换指针的指向
//只能在方法中起作用,不影响方法外面的指针的使用
int *temp = a;
a = b;
b = temp;
printf("change2中:a=%d,b=%d\n",*a,*b);
//如果想要实现方法外面的指针也发生改变,则函数需要使用
//指向指针的指针作为参数(或者直接在外面进行交换指向)
}
//使用(地址/引用)作为参数
void change3(int *a,int* b)
{ //使用临时变量来存储指针指向位置的值
//通过指针(的指向),来直接修改指针指向的位置的数值
int temp = *a;
*a = *b;
*b = temp;
printf("change3中:a=%d,b=%d\n",*a,*b);
//这种方式,能够直接影响方法外面的数据的使用
}
int main()
{
/*
int i = 10;
int* p;
printf("*p:\np=%d\t",p);
printf("*p=%d\n",*p);
*p = i;
printf("*p=i:\np=%d\t",p);
printf("*p=%d\t",*p);
printf("i=%d\n",i);
*p = &i;
printf("*p = &i:\np=%d\t",p);
printf("&i=%d\t",&i);
printf("*p=%d\t",*p);
printf("i=%d\n",i);
p = &i;
printf("p = &i:\np=%d\t",p);
printf("&i=%d\t",&i);
printf("*p=%d\t",*p));
printf("i=%d\n",i);
*/
void change1(int a,int b);
void change2(int* a,int* b);
void change3(int *a,int* b);
int *p1,*p2,*p,a,b,temp;
scanf("%d,%d",&a,&b);
p1=&a; p2=&b;
/*
if(a<b)
//{ p=p1; p1=p2; p2=p;}
{ temp=*p1; *p1=*p2; *p2=temp;}
*/
change1(a,b);
printf("change1--main函数中:a=%d,b=%d\n",a,b);
printf("change1--main函数中:*p1=%d,*p2=%d\n",*p1,*p2);
change2(p1,p2);
printf("change2--main函数中:a=%d,b=%d\n",a,b);
printf("change2--main函数中:*p1=%d,*p2=%d\n",*p1,*p2);
change3(&a,&b);
printf("change3--main函数中:a=%d,b=%d\n",a,b);
printf("change3--main函数中:*p1=%d,*p2=%d\n",*p1,*p2);
printf("max=%d,min=%d\n",*p1,*p2);
system("pause");
return 0;
}
//函数的值传递--传递的是参数的数值,
//在方法中,相当于一个副本使用,不影响函数外面的变量
void change1(int a,int b)
{ int temp = a;
a = b;
b = temp;
printf("change1中:a=%d,b=%d\n",a,b);
}
//使用指针(地址/引用)作为参数
void change2(int* a,int* b)
{ //使用临时指针,存储传递过来的指针,交换指针的指向
//只能在方法中起作用,不影响方法外面的指针的使用
int *temp = a;
a = b;
b = temp;
printf("change2中:a=%d,b=%d\n",*a,*b);
//如果想要实现方法外面的指针也发生改变,则函数需要使用
//指向指针的指针作为参数(或者直接在外面进行交换指向)
}
//使用(地址/引用)作为参数
void change3(int *a,int* b)
{ //使用临时变量来存储指针指向位置的值
//通过指针(的指向),来直接修改指针指向的位置的数值
int temp = *a;
*a = *b;
*b = temp;
printf("change3中:a=%d,b=%d\n",*a,*b);
//这种方式,能够直接影响方法外面的数据的使用
}
相关文章推荐
- 从一个简单例子来理解js引用类型指针的工作方式
- vc++ 的指针和数组结合理解的最佳例子
- 理解this指针的好例子
- 从一个简单例子来理解js引用类型指针的工作方式
- 一个例子程序对常量指针的理解
- 一个例子让你理解c++的指针(传递动态内存)
- 形参和实参理解 数组指针的两个例子
- 一个简单例子理解C语言指针
- 一个理解wait()与notify()的例子
- JSP-一个理解MVC架构的简单的登陆、注册例子
- ajax入门——一些理解及例子
- 指针的理解
- 关于正则表达式中的(?=re)的理解和例子
- 理解指针
- 指针的理解 [2006-09-26]
- 深入理解C语言指针的奥秘
- 一个指针参数的例子
- 指针的基础理解,以及引用的理解
- 深入理解C语言指针的奥秘(实例)
- 对于c/c++中指针学习的两个绝好的例子