10.1 指针的概念
一个变量的地址称为该变量的指针。
存放一个变量的地址的变量,称为指针变量。
指针变量的值是指针。
可以理解为:指针就是地址,地址就是指针。(不严谨,但为了方便理解)。
10.2 指针运算
2.指针变量作为函数参数
例3
void swap(int *p1,int *p2)
{int p;
p=*p1;*p1=*p2;*p2=p;
}
main( )
{int a,b;
int *p1,*p2;
scanf("%d%d",&a,&b);
p1=&a;p2=&b;
swap(p1,p2);
printf("%d,%d\n",a,b);
printf("%d,%d\n",*p1,*p2);
}
例4 输入a,b,c 三个整数,按从大到小顺序输出。
void swap(int *p1,int *p2)
{int p;
p=*p1;*p1=*p2;*p2=p;
}
void exchange(int *q1, int *q2, int *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;
exchange(p1,p2,p3);
printf("%d,%d,%d\n",a,b,c);
}
10.3 数组的指针和指向数组的指针变量
一、指向数组元素的指针变量
二、数组名作函数参数
例3 将数组a中n个整数按逆序重新存放。
三、指向多维数组的指针和指针变量
1.多维数组的指针
2.指向多维数组的指针变量
3. 指向由m个元素组成的一维数组的指针变量
10.4 字符串的指针和指向字符串的指针变量
一、字符串的表示形式
例1 字符串复制
方法1:
main ( )
{ char a[ ]="I am a Chinese.",b[20];
int i;
for (i=0;a[i]!='\0';i++)
b[i]=a[i];
b[i]='\0';
puts(b);
}
方法2:
二、字符串指针做函数参数
例2 用函数实现字符串的复制。
例4 用选择法对10个整数排序。
(1) 实参用指针变量,形参用数组名。
void sort(int x[ ], int n)
{int i,j,k,t;
for (i=0;i<n-1;i++)
{ k=i;
for (j=i+1;j<n;j++)
if (x[j]>x[k]) k=j;
if (k!=i)
{t=x[i];x[i]=x[k];x[k]=t;}
}
}
main ( )
{ int *p,i,a[10];
p=a;
for (i=0;i<10;i++)
scanf("%d",p++);
p=a;
sort(p,10);
for (i=0;i<10;i++)
printf("%d",*p++);
}
(2) 实参用数组名,形参用指针变量。
void sort(int *x, int n)
{ int i,j,k,t;
for (i=0;i<n-1;i++)
{ k=i;
for (j=i+1;j<n;j++)
if (*(x+j)>*(x+k)) k=j;
if (k!=i)
{ t=*(x+i);
*(x+i)=*(x+k);
*(x+k)=t;
}
}
}
main ( )
{ int i,a[10];
for (i=0;i<10;i++)
scanf("%d",&a[i]);
sort(a,10);
for (i=0;i<10;i++)
printf("%3d",a[i]);
}
(3)实参用指针变量,形参也用指针变量。
void sort(int *x, int n)
{int i,j,k,t;
for (i=0;i<n-1;i++)
{k=i;
for (j=i+1;j<n;j++)
if (*(x+j)>*(x+k)) k=j;
if (k!=i)
{ t=*(x+i);
*(x+i)=*(x+k);
*(x+k)=t;
}
}
}
main ( )
{ int *p,i,a[10];
p=a;
for (i=0;i<10;i++)
scanf("%d",p++);
p=a;
sort(p,10);
for (p=a,i=0;i<10;i++)
printf("%d",*p++);
}