標籤:c編程
C指標小結3
現在總結指標的更高一級的用法,其中指向函數的指標在我的博文中已經單獨介紹過了,將會補充介紹幾點,現在介紹別的指標的用法。
首先介紹幾個陷阱:
int f()[];
int f[]();
這兩個聲明都是非法的,如果有人問這兩個聲明什麼意思,我們應當不加思索的說出這是錯誤地聲明,博主就曾經苦苦思考過這兩個聲明的意思,現在想想都覺得可笑。
現在對於指向函數的指標補充幾點:
例如:
int (*pf)(int)=&f;
現在建立了一個函數指標,並把它初始化為指向函數f,其實初始設定式的&操作符是可選的,因為函數名被使用時總是由編譯器把它轉化為函數指標。&操作符只是顯示的說明了編譯器隱式的執行的任務。
函數名首先被轉換為一個函數指標,該指標制定函數在記憶體中的位置。
除了函數指標還有一個重要的用法就是轉化表。就是使用void進行泛型的計算。
我的博文void與泛型計算已經比較清楚的說明了這一問題。
指標最後一個進階應用程式執行個體就是命令列參數的使用,也已經介紹過了。
現在介紹關鍵字const.
const可以建立常數陣列,指標常量,以及指標常量的指標。
通常把指向常量的指標用作函數參量,以表明函數不會引用這個指標來修改資料。
void show_array(const double *ar ,int n)
關於指標賦值和const有一些規則要注意,首先將常量或非常量資料的地址賦給指向常量的指標是合法的。
int rates[10]={0};
const double *p=rates;
然而只有非常量資料的地址才能賦給普通指標:
const double a;
p=a;非法
double *p=rates;合法
聲明一個指向固定的地址的指標:
double *const p=rates;這個指標指向數組的第一個元素的地址並且不能改變。
可以使用兩個const來進行聲明:
const double *const p=rates;不可以修改指標的值和指標指向的內容。
C指標小結3