: a, a
switch case
, , ... , 。
, ?
------------------------------------------------------------------------------------
, : ; 。
, :
{
: 。 , , 。
: : []
, :* [].
, : (* [])(). , “* []” ? , , , * []() ? 。 ? 。 , 。
}
, :
, , 。 : 。
。 , , 。
, 。
:
#include "stdio.h"
int add1(int a1,int b1);
int add2(int a2,int b2);
int main(int argc,char* argv[])
{
int numa1=1,numb1=2;
int numa2=2,numb2=3;
int (*op[2])(int a,int b);
op[0]=add1;
op[1]=add2;
printf("%d %d
",op[0](numa1,numb1),op[1](numa2,numb2));
getch();
}
int add1(int a1,int b1)
{
return a1+b1;
}
int add2(int a2,int b2)
{
return a2+b2;
}
C :
a) (An integer)
b) (A pointer to an integer)
c) , (A pointer to a pointer to an integer)
d) 10 (An array of 10 integers)
e) 10 , (An array of 10 pointers to integers)
f) 10 (A pointer to an array of 10 integers)
g) , (A pointer to a function that takes an integer as an argument and returns an integer)
h) 10 , , ( An array of ten pointers to functions that take an integer argument and return an
integer )
:
a) int a; // An integer
b) int *a; // A pointer to an integer
c) int **a; // A pointer to a pointer to an integer
d) int a[10]; // An array of 10 integers
e) int *a[10]; // An array of 10 pointers to integers
f) int (*a)[10]; // A pointer to an array of 10 integers
g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer
h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer
, , char* buffer int length,buffer ,length 。 : , , (buffer[0]) , 256(28 ) 。 , , 。 , :
void MyFuntion( char* buffer, int length )
{
__int8 nStreamType = buffer[0];
switch( nStreamType )
{
case 0:
function1();
break;
case 1:
......
case 255:
function255();
break;
}
} , , , , , , 。 , 。
, C , , 。 , , int*、double* , :
int funtion( int x, int y );
void main ( void )
{
int (*fun) ( int x, int y );
int a = 10, b = 20;
function( a, b );
fun = function;
(*fun)( a, b );
……
}
1 function, , ( ); 3 , int* double* , , , *fun ; 6 funtion, *fun function 。 5 function(), 7 , 。
, 。 , , , 。 , 、 。
, :
256 ( )。
void funtion0( void );
……
void funtion255(void );
, 。
void (*fun[256])(void);
fun[0] = function0;
……
fun[255] = function();
,MyFunction() :
void MyFuntion( char* buffer, int length )
{
__int8 nStreamType = buffer[0];
(*fun[nStreamType])();
}
2 , 256 case , , nStreamType , , , case 。 , 。
typedef
C++ ( typedef )
( ) 。
// 1: (* )( )
char (*pFun)(int);
char glFun(int a){ return;}
void main()
{
pFun = glFun;
(*pFun)(2);
}
pFun。 “ 1” , int , char 。 , 。
glFun()。 int char 。 —— , 。
main() , —— glFun pFun。main() “*pFun” pFun , glFun() , 2。
( ) typedef 。
// 2:typedef (* )( )
typedef char (*PTRFUN)(int);
PTRFUN pFun;
char glFun(int a){ return;}
void main()
{
pFun = glFun;
(*pFun)(2);
}
typedef 。 PTRFUN , , int char 。 int,char PTRFUN 。
pFun, 1 。
( ) C++ 。
// 3:typedef ( ::* )( )
class CA
{
public:
char lcFun(int a){ return; }
};
CA ca;
typedef char (CA::*PTRFUN)(int);
PTRFUN pFun;
void main()
{
pFun = CA::lcFun;
ca.(*pFun)(2);
}
, “ ” “ ”, , new 。 :
CA *pca = new CA;
pca->(*pFun)(2);
delete pca;
, this 。 :
CA PTRFUN m_pfun;
void CA::lcFun2()
{
(this->*m_pFun)(2);
}
, “->*” “.*” 。 , typedef ( ), (test.dll) :
int DoCase(int, long);
, :
1. :
int (*DOCASE)(int ,long);// DoCase
HINSTANCE gLibMyDLL = NULL;
gLibMyDLL = LoadLibrary("test.dll");
if(gLibMyDLL != NULL)
{
//
DOCASE = (int(*)(int,long))GetProcAddress(gLibMyDLL, "DoCase");
}
//
int s = DOCASE(1,1000);
2. typedef :typedef (*DOCASE)(int ,long);
HINSTANCE gLibMyDLL = NULL;
DOCASE _docase;
gLibMyDLL = LoadLibrary("test.dll");
if(gLibMyDLL != NULL)
{
_docase = (DOCASE)GetProcAddress(gLibMyDll, "DoCase");
}
//
int s=_docase(1,1000);