第十二讲指针
指针的定义与引用
指针变量作为函数参数
指针与数组(上)
指针的定义与引用
指针的定义与引用
指针的概念
指针是一种数据类型,它是用来专门存放所指对象地址变量。也就说,数据值存放在指针所指的对象中,而不是在指针变量中。
例如:定义一个数值型变量i=3,它的地址为2000,把地址值2000存放在变量pi中,通过pi可以间接地访问变量i。Pi就是指向i的指针变量,pi和它所指对象的关系如图:
2000
3
2000
3
Int i=3
Pi=&i
2000
pi
i
*pi
i=3
*Pi=3
一个变量的地址称为该变量的“指针”。
如果一个变量专门用来存放另一变量的地址(即指针),则称为“指针变量”。指针变量的值是指针(地址)。
指针变量的定义
格式:类型标识符*标识符;
功能:定义一个指针变量。
说明:
(1)标识符就是指针变量的名字;
(2)*是指针类型的标志。
(3)必须包括指针的数据类型。
例如:
Int i,j;
Int *p1,*p2;
P1=&i;
P2=&j
Float *p3;
Char *p4;
注意:
(1)标识前面的“*”,表示该变量为指针变量;
(2)一个指针变量只能指向同一个类型的变量。只有同一类型变量的地址才能放到指向该类型的指针变量中。
指针变量的引用
(1)&:取地址运算符,它的作用是取得变量所占用的存储单元的首地址。
(2)*:指针运算符(或称“间接访问”)。
说明:
(1)在利用指针变量间接访问之前,一般都必须使用&运算符将某个变量的地址赋给相应的指针变量。
(2)*“间接访问”运算符的作用,是通过指针变量来访问它所指向的变量(存数据或取数据)。
输出两个整数
main()
{int a,b;
int *p1,*p2;
a=200;b=30;
p1=&a;
p2=&b;
printf(“%d,%d\n”,a,b);
printf(“%d,%d\n”,*p1,*p2);
}
注意:
(1)在定义指针变量的同时也可以初始化,例如
int *p1;
p1=&a;
可改写成一条语句:
int *p1=&a;
(2)一旦将变量a的地址赋给指针变量p1,*p1总是与a等价。
输入a和b两个整数,接先大后小的顺序输出a和b。
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);
printf(“max= %d,min= %d\n”,*p1,*p2);
}
指针变量作为函数参数
函数的参数不仅可以是整型、实型、字符型等数据类型。它的作用是将一个变量的地址传送到另一个函数中。
输入两个数,按大小顺序输出。用指类型的数据做函数的参数。
swap(p1,p2)
int *p1,*p2;
{int p;
p=*p1;*p1=*p2;*p2=p;
}
main()
{int a,b;
int *x1,*x2;
scanf(“%d,%d”,&a,&b);
x1=&a;x2=&b;
if(a<b) swap(x1,x2);
printf(“\n max=%d,min=%d\n”,a,b);
}
输入a、b、c三个整数,按大小顺序输出
swap(pt1,pt2)
int *pt1,*pt2;
{int p;
p=*pt1;*pt1=*pt2;pt2=p;
}
change(q1,q2,q3)
int *q1,*q2,*q3;
{if(*q1<*q2)swap(q1,q2);
if(*q1<*q3)swap(q1,q3);
if(*q2<*q3)swap(q2,q3);
}
main()
{int a,b,c,*p1,*p2,*p3;
scanf(“%d,%d,%d”,&a,&b,&c);
p1=&a;p2=&b;p3=&c;
change(p1,p2,p3);
printf(“\n%d,%d,%d\n”,a,b,c);
}
指针与数组
指向数组元素的指针变量的定义与赋值
int a[10];
int *p;
p=&a[0];
把a[0]元素的地址赋给指针变量p。即p 指向数组的第0号元素。
C语言规定数组名代表数组的首地址,也就是第一个元素的地址。下面的语句是等价的:
p=&a[0];
p=a;
在定义指针变量时可以赋初值:
int *p=&a[0];
等效于:
int *p;
p=&a[0];
或写成:
int *p=a;
第13讲 指针(1) 来自淘豆网www.taodocs.com转载请标明出处.