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

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

 #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. C#获取MAC地址的几种方法

    首先需要用到的一些方法和类: public enum NCBCONST { NCBNAMSZ = 16, MAX_LANA = 254, NCBENUM = 0x37, NRC_GOODRET = 0 ...

  2. mysql导出导入sql文件方法(linux)

    一.导入导出.sql文件for Linux: 1.从mysql中导出数据库test: 在终端运行:mysqldump -h localhost -u root -p test > /home/c ...

  3. 不要怂,就是GAN (生成式对抗网络) (一): GAN 简介

    前面我们用 TensorFlow 写了简单的 cifar10 分类的代码,得到还不错的结果,下面我们来研究一下生成式对抗网络 GAN,并且用 TensorFlow 代码实现. 自从 Ian Goodf ...

  4. mongo学习-固定集合

    一.创建固定集合 db.createCollection("guding",{"capped":true,"size":10,"m ...

  5. 懒人的ERP开发框架--2B&苦B程序员专用

    在企业内部的ERP系统开发中,如果使用MS的技术,那么Winform + DevExpress + IIS + WCF +EF 就是懒人的黄金组合了,EF使用数据库优先,一般ERP应用主要关注点在数据 ...

  6. VS2010+SVN

    小乌龟版本用1.6,用1.8时老报错SVN是2.06, SVN Server是2.1.9

  7. IntelliJ IDEA 2017版 SpringBoot徒手书写HelloWorld

    1.打开编译器,选择File---->New---->Project 2.弹出设置界面,选择如图样式的1.2.3 3.设置包名称 4.继续next 5.finish完成即可 6.自动生成目 ...

  8. Codeforces761A Dasha and Stairs 2017-02-05 23:28 114人阅读 评论(0) 收藏

    A. Dasha and Stairs time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  9. java 封装返回json数据

    做的东西,一直是用easyui的,和后台的交互数据都是json格式的. 今天想要单独弄一个json数据返回给前台,其实是比较简单的问题,json接触不多,记录一下. 代码: public static ...

  10. SQL Server中CROSS APPLY和OUTER APPLY应用

    1.什么是Cross Apply和Outer Apply ? 我们知道SQL Server 2000中有Cross Join用于交叉联接的.实际上增加Cross Apply和Outer Apply是用 ...