c 语言中指针简介


一、指针简介

在c语言中,指针也有相应的类型(同其它数据类型一致),每个指针只能指向一种特定数据类型的变量,只能保存这类变量的地址。
例:
a 是指向int类型的指针,那么a就只能指向int类型的变量,不能指向其它非int类型的变量,
从a去间接访问的东西都被视为整型变量。


二、指针定义

定义指针时,需指定类型描述符,在被定义变量名前面加上* 号,就说明定义的为指针变量。
例:
int *a,*b,*c; //定义了三个整型指针 a b c ;
int *a,b[2],c,*d;//定义了两个整型指针 a ,d 一个数组b ,一个整型变量c;

在c语言中,所有的类型都可以定义为指针类型


三、指针操作


3.1 取地址运算符 &

把运算符&放入变量描述符前面,就能够求出变量的地址,是一个相应类型的指针值。
例:
#include “stdio.h”
int main(){
int a=100; //定义一个整型变量
int *b; //定义一个整型指针
int *c; //定义一个整型指针
b=&a; //将整型变量的地址赋值给指针变量
c=b; //将指针变量赋值给另外一个指针
printf(“b:%d c:%d\n”,*b,*c);
a=891;
printf(“b:%d c:%d\n”,*b,*c);
return 1;
}
//从上面的代码,我们可以看出,我们采用&取址符将整型变量a的地址赋给指针,所以指针也指向了整型变量的地址。
当我们输出变量的值,我们会发现同整型变量的值一致。

3.2 间接访问运算符*

间接运算是由指针获取指向地址的值,这种表达式可以像普通变量一样使用,放入表达式中作为一个数值参与计算,放入赋值运算中,则作为一个赋值表达式进行变量赋值操作。
例:
#include “stdio.h”
int main(){
int a=100;
int *b;
int *c;
b=&a;
c=b;
printf(“a:%d b:%d c:%d\n”,a,*b,*c);
a=891;
printf(“a:%d b:%d c:%d\n”,a,*b,*c);
*b=888; //指针赋值表达式
printf(“a:%d b:%d c:%d\n”,a,*b,*c);
return 1;
}
扩展:
++*b=++(*b);
*b++= *(b++); //根据 *和++的优先级组合

四、指针作为函数参数

由于指针中存储的是变量的地址,如果我们采用指针作为函数的参数进行传递,那么当变量在函数中发生变化后,就会直接体现到变量上。
#include “stdio.h”
void a(int * _a1);
int main(){
int a1=100;

printf(“a1:%d\n”,a1);
a(&a1);
printf(“a1:%d\n”,a1);
return 1;
}

void a(int * _a1){

*_a1=*_a1*921;
}
//以上我们可以看出,由于采用了指针变量作为参数,所以在函数内部可以直接通过变量的地址来改变变量的值。