《C与指针》读书笔记五
指针在C语言编程中应用广泛。并且与数组有交集。很多情况下数组与指针结合使用可以事半功倍。我们可以声明一个数组,并且将其初始化。
本文引用地址:https://www.eepw.com.cn/article/201608/295290.htmint 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个字节。
既然数组通过地址索引使用的,指针也是地址,那么之间就有天然的共性。所以必定有相同之处。比如我们要实现一个数组复制给另外一个数组。可以使用参照一个产品手册中提供的示例代码。
作者通过memcpy实现了src1 数组复制给dst1。我们可以看一下memcpy函数的原型说明。
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);
熟练以后,如果遇到需要数组复制的,可以自己动手实现。就不使用库函数了。使用指针传递一个数组,确实在传参方面效率提高很多。比如排序,只要传入数组的首地址和长度即可。
评论