1. 指针变量与普通变量
指针=&变量
*指针=指针确定的变量的值
例题:输入两个整数,按照先大后小的顺序输出两个数,用指针编写程序
代码一:形参是数组名,实参也是数组名类型
// 编译环境DevC++
#include<stdio.h>
int main()
{
int a,b;
int *p,*q,*r; //定义两个指针分别指向变量a和变量b
scanf("%d %d",&a,&b);
p = &a,
q = &b;
if(a < b)
{
r = p;
p = q;
q = r;
}
printf("较大的数是:%d 较小的数是%d\n",*p,*q);
return 0;
}
代码二
// 编译环境DevC++
#include<stdio.h>
int main()
{
int a,b;
int *p,*q,t; //定义两个指针分别指向变量a和变量b
scanf("%d %d",&a,&b);
p = &a,
q = &b;
if(a < b)
{
t = *p;
*p = *q;
*q = t;
}
printf("较大的数是:%d 较小的数是%d\n",a,b);
return 0;
}
输入3,4后的结果:
2.指针变量与一维数组
用法:
指针=&数组名[某数]
*指针=指针确定的变量的值
指针+i=&数组名[某数+i]
&数组名[某数] 相当于 数组名+某数
数组名[某数] 相当于 *(数组名+某数)
例题:一个整型数组里的5个元素由键盘输入,将每个元素变为原来的2倍再依次输出
#include<stdio.h>
int main()
{
int a[5];
int i,*p;
p = a;//等价于p = &a[0];
for(i = 0;i < 5;i++)
{
scanf("%d",p+i);//等价于scanf("%d",a+i);
*(p + i) = *(p + i)*2;
}
printf("加倍后的数组为:\n");
for(i = 0;i < 5;i++)
printf("%d ",*(p + i));//等价于printf("%d ",*(a + i));
printf("\n");
/*
for(i = 0;i < 5;i++)
printf("%d ",*(p + i));//等价于printf("%d ",*(a + i));
printf("\n");
等价于
for(p = &a[0];p <= &a[4];p++)
printf("%d\t",*p);
*/
return 0;
}
3.指针变量与一维数组相关函数
例题:
有两个小组,分别有5名学生和20名学生,编写程序输入学生的成绩,并调用一个aver函数求两个小组的平均分
代码一:
#include <stdio.h>
int main()
{
float aver(float a[],int n);
float zu1[5],zu2[10