下面的代码将会让你看到:数组和指针很像,指针也可以进行运算。
注意:下面的程序在 VC6.0 下编译不能通过,因为在 VC6.0 中数组长度不能为变量和不定值;请在 Linux 的 GCC 或 Window 的 MinGW 下编译。
笔者顺便推荐一款国产C语言开发神器 -- C-Free 5.0 -- 默认编译器是 MinGW,可以随意切换多个编译器,详情请查看:C-Free 5.0下载[带注册码][赠送破解版][最性感的C、C++开发工具IDE]
#include <stdio.h>
#define SIZE 8
// 从数组 a 中复制 n 个元素到数组 b 中
void cpIntArray(int *a, int *b, int n)
{
for(;n>0;n--)
*a++=*b++;
}
// n 是数组 a 的元素个数;这些元素将被输出,5 个一行
void printIntArray(int a[], int n)
{
int i;
for (i=0; i<n; ){
printf("\t%d ", a[i++]);
if (i%5==0)
printf("\n");
}
printf("\n");
}
// 最多读入 nmax 个整数并保存在数组 a 中,遇到指定的值时结束输入
int getIntArray(int a[], int nmax, int sentinel)
{
int n = 0;
int temp;
printf("Enter integer [%d to terminate] : ", sentinel);
do {
scanf("%d", &temp);
if (temp==sentinel) break;
if (n==nmax)
printf("array is full\n");
else
a[n++] = temp;
}while (1);
return n;
}
int main(void){
int x[SIZE], nx;
int y[SIZE], ny;
printf("Read the x array:\n");
nx = getIntArray(x,SIZE,0);
printf("The x array is:\n");
printIntArray(x,nx);
printf("Read the y array:\n");
ny = getIntArray(y,SIZE,0);
printf("The y array is:\n");
printIntArray(y,ny);
cpIntArray(x+2,y+3,4);
// 注意上面的 x+2
// x 为数组 x 的起始地址,+2 代表按照 x 的数据类型(整数)将指针前移两个单元
// 所以第一次 +2 就代表数组的第三个元素 x[2]
// 可见,指针是可以进行运算的
// y+3 同样可以这样理解
printf("Printing x after having copied 4 elements\n"
"from y starting at y[3] into x starting at x[2]\n");
printIntArray(x,nx);
}
可能的输出结果:
Read the x array:
Enter integer [0 to terminate] : 1 23 45 333 667 0
The x array is:
1 23 45 333 667
Read the y array:
Enter integer [0 to terminate] : 343 565 3 456 8 2 0 456
The y array is:
343 565 3 456 8
2
Printing x after having copied 4 elements from y starting at y[3] into x starting at x[2]
1 23 456 8 2