指针变量:
指针变量的定义形式:
基类型 *指针变量名1,*指针变量名2,…;
指针变量只能指向由定义时基类型规定的类型变量,不能指向其他的变量;
指针变量的赋值:
在定义的同时进行初始化:
int i;
int *p=&i; &取地址计算符,&i表示i的地址。
指针变量的引用:
void main()
{
int a,b,c;
int *p;
a=5;
b=a+3;
p=&a; // 通过&把a的地址赋给了p;
c=*p+3; // 通过指针运算符*把p指向的变量a的值输出,在进行运算;间接访问。
printf("%d,%d\n",a,b);
printf("%d,%d\n",*p,c);
}
例:
输入a,b两个整数,用指针实现先大后小的顺序输出:
void main()
{
int *p1,*p2,*p,a,b;
scanf("%d%d",&a,&b);
p1=&a; // 给指针赋值地址的时候,不加*;* 表示取地址中的内容;
p2=&b;
if(a<b) // 通过交换指针来改变输出的最大最小值,而原数值没变;
{
p=p1;
p1=p2;
p2=p;
}
printf("a=%d,b=%d\n",a,b); // 输出的a,b并没有变化;
printf("max=%d,min=%d\n",*p1,*p2); // 但是指针变化,所以输出变化;
}
以上仅仅改变指针所指的地址,而原地址中的内容并未发生变化!
指针与数组:
一维数组:
数组名是0号元素的地址,是常量,不能赋值
1. 指向数组元素的指针:
指针p既可以指向整型变量(数组名本身即为arr[ 0 ]地址,不需要加&