一、通过指针引用数组元素
题目描述:有一个整型数组a,有10个元素,要求输出数组中的全部元素。
代码如下
#include <stdio.h>
int main()
{
int a[10],i;
int * p;
printf("please enter 10 integer numbers:");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
/*或者
scanf("%d",p++);//p=a;*/
}
for(i=0;i<10;i++)
{
printf("%d ",*(a+i));
}
/*或者
for(p=a;p<(a+10);p++)
printf("%d ",*p);*/
/*或者
p=a;
for(i=0;i<10;i++)
printf("%d ",*(p++));
*/
printf("\n");
return 0;
}
二、数组名做函数参数
题目描述:将数组a中n个整数按相反顺序存放(以n=10为例)。
代码如下:
- 形参用数组名,实参用数组名。
#include <stdio.h>
void invert(int x[],int n)/*函数如果不放在主函数前的话,必须要先声明,
否则会出现[Warning]: conflicting types for 'invert'*/
{
int temp,i,j,m;
m=(n-1)/2;
for(i=0;i<=m;i++)
{
j=n-1-i;
temp=x[i];
x[i]=x[j];
x[j]=temp;
}
return ;//可加可不加,告知此函数已结束
}
int main()
{
int i,a[10]={3,7,9,11,0,6,7,5,4,2};
printf("The original array:\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
invert(a,10);
printf("The array has been inverted:\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
return 0;
}
- 指针变量做实参,指针变量做形参。
#include <stdio.h>
void invert(int *x,int n)
{
int *p,m,temp,*i,*j;//*i,*j是需要交换的元素,p是循环结束的条件
m=(n-1)/2;
j=x+n-1,p=x+m;
for(i=x;i<=p;i++)
{
j=x+n-1-i+x;//这个是我自己想的,试验了一下好像成,虽然挺怪的
temp=*i;
*i=*j;
*j=temp;
}
return;
}
int main()
{
int a[10]={3,7,9,1,0,6,7,5,4,2};
int i;
printf("The original array:\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
invert(a,10);
printf("The array has been inverted:\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
return 0;
}
三、指针排序
题目描述:用指针方法对10个整数按由大到小顺序排序。
代码如下:
#include <stdio.h>
void sort(int x[],int n)
{
int i,j,temp;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(x[j]>x[i])
{
temp=x[i];
x[i]=x[j];
x[j]=temp;
}
}
}
}
int main()
{
int i,*p,a[10];
printf("please enter 10 integer numbers:");
for(p=a;p<a+10;p++)
{
scanf("%d",p);
}
p=a;
sort(p,10);
printf("The array has been sorted:\n");
for(p=a;p<(a+10);p++)
{
printf("%d ",*p);
}
return 0;
}