《C与指针》读书笔记二
关于指针变量的解引用在该书中有另外一种说法----“间接访问”。我认为“间接访问”比较能更好的表达*Point实际含义。我不知道英文版中是怎么描述的,但是这种翻译方法更能表达指针的物理含义。在我的同事中“解引用”说法比较流行。“间接访问”彻底表达了指针变量和指针内容的意义。
本文引用地址:https://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数组的排序。
评论