最近再跟指標做朋友, 正好遇到函數與指標. 其實函數也在程式內也是有屬於自己的位址

所以指標一樣能指向函數, 在此釐清自己的觀念以及記錄下來.

 #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;
05-06 11:44