指针在C言语编程中运用广泛。而且与数组有交集。许多情况下数组与指针结合运用能够事半功倍。咱们能够声明一个数组,而且将其初始化。
int arrary[10]={ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
数组在声明时能够一起初始化。以上句子的成果便是声明一个数组,一起初始化该数组。等价于以下句子:
int arrary[10];
int i;
for( i = 0; i < sizeof (arrary ); i++ )
{
arrary[i] = i;
}
初始化完毕后,在内存中存储如下:
数组是经过数组名和下标的结合运用的。arrary是数组名,相当于数组的第一个成员的首地址。下标相当于偏移量。arrary[2]的地址其实相当于arrary+2*sizeof(int)。int是数据类型。在有的体系中是4,在有些体系中是2。在此咱们假定int类型是4个字节。
已然数组经过地址索引运用的,指针也是地址,那么之间就有天然的共性。所以必定有相同之处。比方咱们要完成一个数组仿制给别的一个数组。能够运用参照一个产品手册中供给的示例代码。
#include
#include
void tst_memcpy (void) {
char src1 [100] = "Copy this string to dst1";
char dst1 [100];
char *p;
p = memcpy (dst1, src1, sizeof (dst1));
printf ("dst = \"%s\"\n", p);
}
作者经过memcpy完成了src1 数组仿制给dst1。咱们能够看一下memcpy函数的原型阐明。
void *memcpy (
void *dest, /* destination buffer */
void *src, /* source buffer */
int len); /* bytes to copy */
dest与src都是指针,可是咱们传入参数却是数组。p = memcpy (dst1, src1, sizeof (dst1));
dst1与src1是咱们声明的数组。正由于dst1与src1也是地址,与指针含义完全相同,所以完成了数组仿制。
memcpy是C编译器供给规范库函数。咱们也能够自己完成一下,由于是示例,就不过多考虑安全性问题了。
void *MemCopy( void *dest, void *src, int len)
{
int i;
char *temp;
temp = dest;
for( i =0; i < len; i++)
{
temp[i] = src[i];
}
return dest;
}
temp[i] = src[i];咱们依然依照数组办法处理了指针。在这本书上,我看到一种表明办法。arrary[2]其实等价于*(arrary+2).也便是
arrary[2] = 2;等价于*(arrary+2)=2;
m = arrary[2]; 等价于m =*(arrary+2);
娴熟今后,假如遇到需求数组仿制的,能够自己着手完成。就不运用库函数了。运用指针传递一个数组,确真实传参方面功率进步许多。比方排序,只需传入数组的首地址和长度即可。