以下文章参考《C Primer Plus》
我们什么时候需要使用指针,当我们调用函数,函数需要改变变量的值时,我们就需要使用地址参数来完成这个任务。
假设我们定义了一个函数,这个函数接受两个参数,并且交换两个参数的值,如果不使用指针,我们也许会这样来完成:
#include <stdio.h>
void interchange(int u,int v);
int main(void){
int x=5, y=10;
printf("The value of x is %d\nThe value of y is %d\n",x,y);
printf("after the function of interchange\n");
interchange(x,y);
printf("The value of x is %d\nThe value of y is %d\n",x,y);
return 0;
}
void interchange(int u,int v){
int temp;
temp=u;
u=v;
v=temp;
}
最后输出结果为:
The value of x is 5
The value of y is 10
after the function of interchange
The value of x is 5
The value of y is 10
结果不如人意,因为interchage函数使用独立于x和y的变量,即使u和v的变量值交换了,对x和y也没有任何影响。所以,我们需要把x和y的地址给interchage函数,这样函数就可以追根溯源,在源头改变x和y的值了。我们可以这么做:
#include <stdio.h>
void interchange(int * u,int * v);
int main(void){
int x=5, y=10;
printf("The value of x is %d\nThe value of y is %d\n",x,y);
printf("after the function of interchange\n");
interchange(&x,&y);
printf("The value of x is %d\nThe value of y is %d\n",x,y);
return 0;
}
void interchange(int * u,int * v){
int temp;
temp=*u;
*u=*v;
*v=temp;
}
最后结果顺利的交换了,真实令人欣慰。
The value of x is 5
The value of y is 10
after the function of interchange
The value of x is 10
The value of y is 5
最后让我们再看看几个简单的基础操作:
#include <stdio.h>
int main(void){
int x=5;
int * ptr; //声明一个指针,声明指针时一般带有空格,并且要说明指针指向的数据类型
ptr=&x; //将x的地址赋值给ptr指针,其中&是取地址的作用
printf("the address of ptr is %p\n",ptr); //%p这个是专门给指针用的,输出地址不用带*
printf("the value of ptr is %d\n",*ptr); //如果要输出地址上的值,就需要带*
return 0;
}
最后结果为:
the address of ptr is 0061FF28
the value of ptr is 5
网友评论