void (*signal(int sig, void (*handler)(int)))(int);
分析如下形式:
void(*signal( ))(int)
signal是乙個函式,它的返回值是乙個函式指標,而它的引數中有乙個函式指標形式void (*handler)(int)。
借助於typedef來進行簡化如下:
/*定義函式指標返回值是void,引數是int型*/
typedef void (*ptr_to_func)(int)
/*表明signal是乙個函式,接受兩個引數,其中乙個是函式指標,返回值也是函式指標*/
ptr_to_func signal(int ,ptr_to_func);
#include
#include "tlpi_hdr.h"
static
void
sighandler(int sig)
intmain(int argc, char *argv)
}
stackoverflow上的解釋:
附常見宣告形式解析:
no 1.
int
(*func_p)
(double)
解讀:
func_p首先是乙個函式指標.
func_p是乙個指向引數為double,返回值為int的函式指標.
no 2.
int
*hoge[10]
hoge是乙個指向int的指標的陣列(元素個數為10)
no 3.
double (*array_p)[3]
array_p是指向double(元素個數為三)的陣列的指標
array_p = &array;這樣賦值沒有問題,因為型別相同。
如果array_p=array編譯器就會發出警告,提示如下:
指向int的指標和指向int的陣列(元素個數3)的指標是完全不同的資料型別.
no 4.
int (*func_table[10])(int a)
指向返回int的函式(引數型別是int)的指標的陣列(元素個數為10)
範例:
/*
name: 函式指標陣列
author: 52coder
date: 03/06/17 17:24
description: pointer
*/#include
#include
int func(int a)
int main()
no 5.
c語言中不存在多維陣列.
對於如下宣告:
int hoge[3][2];
解讀為:陣列hoge有2個元素,元素型別是int[3的陣列]
no.6
左值與右值的區別
表示式代表某處的記憶體區域的時候,我們稱當前的表示式為左值,相對的是表示式只是代表值的時候,我們稱當前的表示式為右值.
C語言宣告
怎樣定義和宣告全域性變數和函式最好。首先,儘管乙個全域性變數或函式可以有多處宣告但是定義卻最多隻允許出現一次,對於全域性變數,定義是真正分配空間並賦初值的宣告,對於函式,定義是提供函式體的宣告。例如 這些是宣告 extern int i extern int f 而這些是定義 int i 1 int...
C語言 宣告
1 首先著眼於識別符號 變數名或者函式名 2 從距離識別符號最近的地方開始,依照優先順序解釋派生型別 指標,陣列和函式 優先順序如下 1 用於整理宣告內容的括弧 2 用於表示陣列的,用於表示函式的 3 用於表示指標的 例如int func p double func p是指向返回int型別的函式的指...
C語言宣告語法
概述 在很多情況下,尤其是讀別人所寫 的時候,對c語言宣告的理解能力變得非常重要,而c語言本身的凝練簡約也使得c語言的宣告常常會令人感到非常困惑,因此,在這裡我用一篇的內容來集中闡述一下這個問題。問題 宣告與函式 有一段程式儲存在起始位址為0的一段記憶體上,如果我們想要呼叫這段程式,請問該如何去做?...