新闻中心

EEPW首页 > 嵌入式系统 > 牛人业话 > 《C与指针》读书笔记五

《C与指针》读书笔记五

作者:时间:2016-08-10来源:网络收藏

  语言编程中应用广泛。并且与数组有交集。很多情况下数组与结合使用可以事半功倍。我们可以声明一个数组,并且将其初始化。

本文引用地址:http://www.eepw.com.cn/article/201608/295290.htm

  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个字节。

  既然数组通过地址索引使用的,也是地址,那么之间就有天然的共性。所以必定有相同之处。比如我们要实现一个数组复制给另外一个数组。可以使用参照一个产品手册中提供的示例代码。

  作者通过memcpy实现了src1 数组复制给dst1。我们可以看一下memcpy函数的原型说明。

  dst1与src1是我们声明的数组。正因为dst1与src1也是地址,与指针意义完全相同,所以实现了数组复制。

  memcpy是编译器提供标准库函数。我们也可以自己实现一下,因为是示例,就不过多考虑安全性问题了。

  void *Memopy( 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);

  熟练以后,如果遇到需要数组复制的,可以自己动手实现。就不使用库函数了。使用指针传递一个数组,确实在传参方面效率提高很多。比如排序,只要传入数组的首地址和长度即可。



关键词: C 指针

评论


相关推荐

技术专区

关闭