内容正文:
第9章 C的精华
—指针类型
C语言技能教程
第 九 章
9.1 技能1:简单变量的指针的应用
9.2 技能2:应用指向数组的指针对数组
元素进行操作
9.3 技能3:指向函数的指针的简单应用
C语言技能教程
9.1 技能1
【知识点】
1.指针的定义
“指针”就是地址,一个变量的指针就是指该变量的地址。指针变量就是存放地址的变量。C语言规定:在使用变量之前必须先定义,一般形式如下:
类型标识符 *指针变量
(1)指针变量的定义必须用符号“*”,表明其后的变量是指针变量。
(2)定义了一个指针变量p1以后,系统就为这个指针变量分配一个存储单元(一般为2个字节),用它来存放地址,但此时该指针变量并未指向确定的整型变量,因为该指针变量中并未赋予确定的地址。
C语言技能教程
9.1 技能1
【知识点】
(3)一个指针变量只能指向同一类型的变量。
(4)指针变量可以定义为指向字符型、实型以及其他类型的变量。
2.指针的操作
(1)取地址运算符“&”,如对已定义过的变量 i 操作,“&i”表示变量i的内存起始地址。
(2)指针运算符,或间接访问运算符“*”,访问指针变量所指向的变量中的数据。
C语言技能教程
例9.2 输入两个整数,按由小到大的顺序输出。
main( )
{
int a,b,*pl,*p2,*p;
scanf("%d,%d",&a,&b);
p1=&a; p2=&b;
if(a>b)
{ p=p1;p1=p2;p2=p;}
printf("a=%d,b=%d
",a1,a2);
printf("Min=%d,Max=%d
",*p1,*p2);
}
9.1 技能1
【典型例题】
C语言技能教程
9.1 技能1
【点拨】
1、交换指针和交换指针所指向的变量的值有着本质的区别。
2、两处“*p”的不同意义。
int *p; 表示定义指针变量p。它前面的“*”只是表示该变量为指针变量。
a1=*p; 此处的“*”是指针运算符,*p代表的是变量,即指针变量p所指向的变量a1。
C语言技能教程
9.2 技能2
【知识点】
1. a[i]表示数组a中第i个元素的值,a+i是a[i]的地址,即&a[i]。
2.引用一个数组元素,可以利用前面介绍的下标法a[i] ,也可以利用地址法*(a+i) 。 a+i是a[i]的地址,那么用指针运算符对它操作,则是取a+i地址中的数据了,也就是数组a中下标为i的元素值。
3.可以定义一个指针变量指向数组元素。例如:
int *p; p=&a[0];
p指向a,*p就是a[0]的值,*(p+1)就是a[1]的值,*(p+2)就是a[2]的值。
C语言技能教程
9.2 技能2
【知识点】
1. a[i]表示数组a中第i个元素的值,a+i是a[i]的地址,即&a[i]。
2.引用一个数组元素,可以利用前面介绍的下标法a[i] ,也可以利用地址法*(a+i) 。 a+i是a[i]的地址,那么用指针运算符对它操作,则是取a+i地址中的数据了,也就是数组a中下标为i的元素值。
3.可以定义一个指针变量指向数组元素。例如:
int *p; p=&a[0];
p指向a,*p就是a[0]的值,*(p+1)就是a[1]的值,*(p+2)就是a[2]的值。
C语言技能教程
例9.3 利用指针方法输出数组a中全部元素。
main( )
{
int a[3],i;
a[0]=10;a[1]=20;a[2]=30;
for(i=0;i<3;i++)
printf("a[%d]=%d",i,a[i]);
printf("
");
} /*下标法*/
9.2 技能2
【典型例题】
C语言技能教程
例9.3 利用指针方法输出数组a中全部元素。
main( )
{
int a[3],i;
a[0]=10;a[1]=20;a[2]=30;
for(i=0; i<3; i++)
printf("a[%d]=%d",i,*(a+i));
printf("
");
} /*地址法1*/
9.2 技能2
【典型例题】
C语言技能教程