今天复习的是通过指针引用数组函数,以及函数的递归调用,个人认为这部分比较复杂,对于c语言基础不是很好的我来说利用指针以及数组函数编写一个完整的程序有点难度。
概要:
假设p已定义为一个指向整型数据的指针变量,并已给它赋了一个整型数组元素的地址,使它指向某一个数组元素。如果有该语句:*p=1; 表示将1赋给p当前所指向的数组元素。
如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素,而不是将p的值(地址)简单的加一。
如果p的初值为&a[0]:
p+i和a+i就是a[i]的地址
*(p+i)或*(a+i)是p+i或a+i所指向的数组元素,即a[i]
指向数组的指针变量也可以带下标,如p[i]与*(p+i)等价
#include <stdio.h>
int main()
{
void move(int[20],int,int);
int number[20],n,m,i;
printf("how many numbers?");
scanf("%d",&n);
printf("input %d numbers:\n",n);
for(i = 0;i < n;i++)
scanf("%d",&number[i]);
printf("how many place you want move?");
scanf("%d",&m);
move(number,n,m);
printf("Now,they are:\n");
for(i = 0;i < n;i++)
printf("%d",number[i]);
printf("\n");
return 0;
}
void move(int array[20],int n,int m)
{
int *p,array_end;
array_end = *(array + n - 1);
for(p = array + n - 1;p > array;p--)
*p = *(p-1);
*array = array_end;
m--;
if(m > 0) move(array,n,m);
}