《C與指針》讀書筆記二
關(guān)于指針變量的解引用在該書中有另外一種說法----“間接訪問”。我認為“間接訪問”比較能更好的表達*Point實際含義。我不知道英文版中是怎么描述的,但是這種翻譯方法更能表達指針的物理含義。在我的同事中“解引用”說法比較流行。“間接訪問”徹底表達了指針變量和指針內(nèi)容的意義。
本文引用地址:http://butianyuan.cn/article/201607/294356.htm通過以下語句可以簡單了解指針的意義。
int a = 112;
int b = -1;
float c = 3.14;
int *PointA ;
float *PontB;
PointA = &a;
PontB = &c;
通過一下內(nèi)存模型來理解,就特別方便。
PointA = &a; 是使PointA指向a變量的地址,PointA的地址為0x101 02,值為0x100 00。*PointA表達了對0x100 00地址的訪問,所以是“間接訪問”。
除了強調(diào)指針“間接訪問”,指針可以用于算數(shù)運算。這在初級入門的書本中是不介紹的。其實指針算數(shù)運算也有很大的應用。
int a[10];
int *Point;
Point = &a[0];
Point ++;
Point +=6;
Point = &a[0]; 是將數(shù)組a的第一個元素的地址賦給Point,與Point = a;完全等價的。數(shù)組的名稱代表了數(shù)組的起始地址。圖解如下:
Point++;執(zhí)行結(jié)束后,0x101 02地址內(nèi)容為0x100 00,Point存入的地址為a[0]的地址。如果* Point間接訪問是a[0]的值。 Point +=6;執(zhí)行結(jié)束后,0x101 02地址內(nèi)容為0x100 06,如果* Point間接訪問是a[6]的值。
通過這里了解,就可以得出指針在傳遞大量參數(shù)時所體現(xiàn)出的效率非常高。因為只要將a數(shù)組的地址和長度傳遞給工具函數(shù)即可。這里的“工具”函數(shù)可以理解為加工處理數(shù)據(jù)的函數(shù),比如隊一組數(shù)組排序的函數(shù)。最常見的書冒泡排序。
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函數(shù)中,使用了sort即是地址。Len即書排序的數(shù)據(jù)。調(diào)用方法如下:
bubbleSort( Tarrary, 5);
只需要一個指針傳送一個地址,和一個長度,完成了對Tarrary數(shù)組的排序。
評論