标签:
C中重要的概念就是指针了,指针可以方便我们实现一些功能,但同时我么也要承担使用指针的风险。下面是使用指针的一个小例子。
#include<stdio.h>
void swap(int *, int *);
int main(void){
int m, n;
m = 5;
n = 10;
printf("Before change m = %d and n = %d.\n", m, n);
swap(&m, &n);
printf("After change m = %d and n = %d.\n", m, n);
return 0;
}
void swap(int * m, int * n){
int temp;
temp = *m;
*m = *n;
*n = temp;
}
代码实现的功能很简单,交换两个整数。
说道指针,就不得不提指针中两个重要的符号:‘*‘和‘&‘。
‘*‘,取数运算符,也叫间接运算符,是一个一元运算符。一般有两种使用方法:
1、用在函数声明中,表明函数的参数是一个指针型变量,或表明函数的返回值是一个指针型变量。如上例中的swap函数的声明。在此处声明中省略了变量名称,完整的形式是:
#include<stdio.h>
void swap(int * m, int * n);
int main(void){
...
}
void swap(int * m, int * n){
....
}
此时‘*‘和变量名之间一般加一个空格,当然也可以不加。使用了这种声明,表明函数接收的是两个int指针类型的变量,在调用此函数时就要将指针类型的变量传递给此函数。
2、用在表达式中,作为取数运算符,其操作数是指针型变量,也就是一个地址,操作的结果是取得该地址对应的数据。例如上例中的swap函数中:
temp = *m;
因为m是一个int型的地址,所以这条语句的结果是取出指针m对应的数据并赋值给temp。
‘&‘,取地址运算符,一元运算符,后跟变量名,作用是取出该变量所在内存单元的地址,一般以16进制数表示,可以在printf中使用%p打印它。如上例中的:
swap(&m, &n);
m,n都世界int型变量,&m的意思是取出变量m所在内存单元的地址。这条语句的含义是,取出m,n的地址并传递给swap函数,这样就可以在swap函数中改变变量m,n对应的数值了。
综上,在作为一元运算符时,‘*‘和‘&‘是一对逆操作,前者取出地址对应的变量的值,后者取出变量在内存中的地址。使用指针的关键在于分清所操作的变量是一个普通变量还是一个指针。
标签:
原文地址:http://www.cnblogs.com/msing/p/4277978.html