新闻中心

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

《C与指针》读书笔记二

作者:时间:2016-07-21来源:网络收藏

  关于变量的解引用在该书中有另外一种说法----“间接访问”。我认为“间接访问”比较能更好的表达*Point实际含义。我不知道英文版中是怎么描述的,但是这种翻译方法更能表达的物理含义。在我的同事中“解引用”说法比较流行。“间接访问”彻底表达了变量和指针内容的意义。

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

  通过以下语句可以简单了解指针的意义。

  int a = 112;

  int b = -1;

  float c = 3.14;

  int *PointA ;

  float *PontB;

  PointA = &a;

  PontB = &c;

  通过一下内存模型来理解,就特别方便。

  PointA = &a; 是使PointA指向a变量的地址,PointA的地址为0x101 02,值为0x100 00。*PointA表达了对0x100 00地址的访问,所以是“间接访问”。

  除了强调指针“间接访问”,指针可以用于算数运算。这在初级入门的书本中是不介绍的。其实指针算数运算也有很大的应用。

  int a[10];

  int *Point;

  Point = &a[0];

  Point ++;

  Point +=6;

  Point = &a[0]; 是将数组a的第一个元素的地址赋给Point,与Point = a;完全等价的。数组的名称代表了数组的起始地址。图解如下:

  Point++;执行结束后,0x101 02地址内容为0x100 00,Point存入的地址为a[0]的地址。如果* Point间接访问是a[0]的值。 Point +=6;执行结束后,0x101 02地址内容为0x100 06,如果* Point间接访问是a[6]的值。

  通过这里了解,就可以得出指针在传递大量参数时所体现出的效率非常高。因为只要将a数组的地址和长度传递给工具函数即可。这里的“工具”函数可以理解为加工处理数据的函数,比如队一组数组排序的函数。最常见的书冒泡排序。

  void bubbleSort( int sort[], unsigned char len )

  {

  char i,j;

  int temp;

  len -= 2;

  for( i =len; i>=0; i--)

  {

  for( j =0; j<=i; j++)

  {

  if( sort[j+1] < sort[j])

  {

  temp = sort[j];

  sort[j]=sort[j+1];

  sort[j+1]=temp;

  }

  }

  }

  }

  在bubbleSort函数中,使用了sort即是地址。Len即书排序的数据。调用方法如下:

  bubbleSort( Tarrary, 5);

  只需要一个指针传送一个地址,和一个长度,完成了对Tarrary数组的排序。



关键词: C 指针

评论


相关推荐

技术专区

关闭