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

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

 #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;

(C/C++) 指向函數的指標的更多相关文章

  1. js正則函數 match、exec、test、search、replace、split 使用介紹集合

    match 方法 使用正則表達式模式對字元串執行查找,並將包含查找的結果作為數組返回. stringObj.match(rgExp) 參數 stringObj 必選項.對其進行查找的 String 對 ...

  2. Math.Round函數

    Math.Round這個函數的解釋是將值按指定的小數位數舍入,但並不就是四捨五入.這種舍入有時稱為就近舍入或四舍六入五成雙 其實在 VB, VBScript, C#, J#, T-SQL 中 Roun ...

  3. OpenERP函數字段的應用

    在ERP開發過程中經常會使用到某字段的值是由其他字段計算得來,並且有些還需要將計算的結果存入資料庫. 以上功能上OpenERP中是用field.function實現的 其中有種模式 a). 只計算,不 ...

  4. oracle decode(nvl(estimate_qty,0),0,1,estimate_qty) 函數

    oracle   decode(nvl(estimate_qty,0),0,1,estimate_qty) 函數

  5. js匿名函數

    (function($){})(jquery) == (function($){})(jQuery) 实际上是匿名函数 用于存放开发插件的代码 作用(非常有用): 这种写法的最大好处是形成闭包.在(f ...

  6. C#判断奇偶数的函數

    // 现代流行的"程序员" public static bool IsOdd(int n) { while (true) { switch (n) { : return true; ...

  7. PHP 計算字符串長度函數

    PHP內置的字符串長度函數strlen無法正確處理中文字符串,它得到的只是字符串所占的字節數.對於GB2312的中文編碼,strlen得到的值是漢字個數的2倍,而對於UTF-8編碼的中文,就是3倍的差 ...

  8. SQL窗体函數一例

    需求: MSSQL,列出服務實例中全部數據庫的例如以下信息: 數據庫ID.數據庫名.創建日期.數據文件類型.數據文件大小.數據庫總大小.文件所在路徑. 寫法(後面的百分比為所花時間占比): -- 连接 ...

  9. js函數

    函數是什麼?函數就是被事件驅動或者調用執行的可重複的代碼塊. 函數聲明: 使用關鍵詞function,關鍵詞function大小敏感. function a{代碼塊} 局部變量: 在函數內部聲明的變量 ...

随机推荐

  1. JAVA-用HttpClient来模拟浏览器GET,POST

    一般的情况下我们都是使用IE或者Navigator浏览器来访问一个WEB服务器,用来浏览页面查看信息或者提交一些数据等等.所访问的这些页面有的仅仅是一些普通的页面,有的需要用户登录后方可使用,或者需要 ...

  2. UCI数据

    http://archive.ics.uci.edu/ml/datasets.html?format=&task=&att=&area=&numAtt=&num ...

  3. http头部信息

    1.常见的返回码 100: 请服务器端继续返回 200:成功 301:永久重定向 存的地址永久的改变了  301 302 : 暂时重定向 302仍然使用老得url 401 : 无法找到资源file n ...

  4. RocketMQ 加载配置文件

    BrokerStartup.java // 指定配置文件 if (commandLine.hasOption('c')) { String file = commandLine.getOptionVa ...

  5. 引入jQuery

    用于测试和开发(未压缩,是可读的代码)  uncompressed, 用于实际的网站中,已被精简和压缩.  minified   jQuery 1.xjQuery Migrate  过渡版jQuery ...

  6. SpringMVC源码解析- HandlerAdapter - ModelFactory

    ModelFactory主要是两个职责: 1. 初始化model 2. 处理器执行后将modle中相应参数设置到SessionAttributes中 我们来看看具体的处理逻辑(直接充当分析目录): 1 ...

  7. 《Forward团队-爬虫豆瓣top250项目-开发文档》

    码云地址:https://github.com/xyhcq/top250 模块功能:获取豆瓣top250网页的源代码,并分析. def getHTMLText(url,k): # 获取网页源代码 tr ...

  8. [label][responsive-web-design]网页响应测试各种尺寸的工具

    因为现在各种各样的尺寸上网设备 ,所以我们现在的网页设计都必须要兼容到各种尺寸的屏幕,必须测试各个 size下面的页面布局与排版. 一个开发人员是不可能拥有各种设备来进行测试,那么有没有什么便捷的工具 ...

  9. [label][git-commands] Several Git Commands

    The process of Git commands Operation 1. git commit -m 'fist post' Windows PowerShellCopyright (C) 2 ...

  10. Oracle EBS View 视图查看没有数据

    --关于看视图查看没有数据的问题 --原因OU过滤关系 --Oracle SQL*Plus --toad EXECUTE  fnd_client_info.set_org_context(:ou_id ...