最近再跟指標做朋友, 正好遇到函數與指標. 其實函數也在程式內也是有屬於自己的位址
所以指標一樣能指向函數, 在此釐清自己的觀念以及記錄下來.
#include <stdio.h>
#include <stdlib.h>
#include <iostream> using namespace std; const double * f1 (const double ar[], int n);
const double * f2 (const double *, int n);
const double * f3 (const double *, int); int main(int argv, char * argc[]){
double av[] = { 1112.3, 1542.6, 2227.9}; const double *(*pv)(const double *, int n) = f1;
cout << (*pv)(av,) << " : " << *(*pv)(av,) << endl; auto p2 = f2;
cout << p2(av, ) << " : " << *p2(av, ) << endl; const double *(*p3[]) (const double *, int) = {f1, f2, f3};
auto pb = p3; for(int i = ; i < ; i++){
cout << pb[i](av,) << " : " << *pb[i](av, ) << endl;
}
return ;
} const double * f1 (const double ar[], int n){
return ar;
} const double * f2 (const double ar[], int n){
return ar + ;
} const double * f3 (const double ar[], int n){
return ar + ;
}
首先宣告 3個 會回傳 const double * 的函數, 而 f1, f2, f3 分別回傳 input ar不同的位址
在main裡頭我也利用3種不同的方法去指向函數, 第一次遇見只覺得有點複雜. 但是看穿了就是用 (*pv) 去取代 function 名稱
const double * (*pv) (const double *, int n);
如果需要宣告成陣列則可以使用下列宣告方式
const double * (*p3[]) (const double *, int);
目前常用且理解使用指標的使用時機:
如果你沒有需要 array 的 size, 直接利用 pointer to array 單純宣告一個 *ptr即可
int * ptr = array;
char matrixA[][];
char (*ptr)[];
ptr = matrixA;
雙重指標以及指標, 3以下行取值, 取位址,
若是要取得 a 的位址 : &a, ptr, * ptr
a 的數值 : a, *ptr, **p
ptr 的位址 : &ptr, p, &*p
p 的位址 : &p
int a = ;
int *ptr = &a;
int **p = &ptr;