# 函数指针复杂的例子

+关注继续查看

int pam(int );

int (*p)(int);

double (*p)(int);肯定是错误的。

const int *f1(const double *,int)

const int* (*p)(const double *,int)

const int* (*p[3])(const double *,int)

p就是这样一个指针，他是指向函数指针的指针，当然是第一个
p+1呢当然也是也是一个指向函数指针的指针，当然是第二个元素。

const int *a = (*p[1])(darray,10)

const int *a = p[1](darray,10)

const int a = *((*p[1])(darray,10))

const int a = *(p[1](darray,10))

const int* (*(*pt)[3])(const double *,int) = &p;

const int* (*p[3])(const double *,int)

const int* (*(*pt)[3])(const double *,int)

const int *a = (*(*pt)[1])(darray,10)

const int *a = (*pt)[1](darray,10)

const int a = *((*(*pt)[1])(darray,10))

const int a =*((*pt)[1](darray,10))

int (*p)[3] [3]代表了有3个元素，及(*p)[0],(*p)[1],(*p)[2],当然他也等价

(*(p+1))[0],(*(p+1))[1],(*(p+1))[2]

const int* (*(*pt)[3])(const double *,int) = &p;

(*pt)[0]或者*pt+0

<ptad<<endl; pointer="" to="" function="" array="" address<pt+0<<endl;  ="" pointer="" to="" function="" array="" number="" 1<pt+1<<endl;  ="" pointer="" to="" function="" array="" number="" 2<datac<<endl;
<step;i++)
<endl;
<step;i++)
<endl;
<count<<endl;
<step;i++)
<endl;
<endl;
<count<<endl;
1 /*************************************************************************
2   > File Name: functionp.cpp
3   > Author: gaopeng
4   > Mail: gaopp_200217@163.com
5   > Created Time: Thu 26 May 2016 05:42:20 PM CST
6  ************************************************************************/
7
8 #include
9 #include
10 using namespace std;
11
12 const int* add(const int *data,int step);
13 const int* mul(const int *data,int step);
14
15 int getdata (int *data,int step);
16
17
18
19 int main(void)
20 {
21     int datac=0;
22     int data[5];
23     const int* (*pt[2])(const int *,int);      //pt[2] is function pointer array have 2 number
25     getdata(data,5);
27     pt[1]=mul;                                 //function pointer
30     cout<<"function 1 address is "<<pt+0<<endl;     //pointer to function pointer array number 1
31     cout<<"function 2 address is "<<pt+1<<endl;     //pointer to function pointer array number 2
32     for(int i=0;i<2;i++)
33     {
34
36     }
38 }
39
40
41 int getdata (int *data,int step)
42 {
43
44     for(int i=0;i<step;i++)
45     {
46         if(!(cin >> data[i]))
47         {
48
49             cin.clear();
50             while(cin.get()!= '\n')
51             {
52                 continue;
53             }
54             cout<< "please input int data"<<endl;
55             exit(1);
56         }
57     }
58     return 0;
59 }
60
61
62 const int* add(const int *data,int step)
63 {
64
65     static int count=0;
66     for(int i=0;i<step;i++)
67     {
69         count += *(data+i);
70         //cout<<count<<endl;
71     }
72     return &count;
73 }
74
75 const int* mul(const int *data,int step)
76 {
77
78     static int count=1;
79     for(int i=0;i<step;i++)
80     {
81
82         if(*(data+i) == 0)
83         {
84
85             cout<<"Cannot data into 0"<<endl;
86             exit(0);
87         }
88
89         //cout <<"mul:"<< *(data+i) <<endl;
90         count *= *(data+i);
91         //cout<<count<<endl;
92     }
93     return &count;
94 }

其实整个例子很简单，就是计算几个输入值的和与乘的和，但是为了展示
实际数组的名字也是指针那么我们可以理解为
很明显()的结合性强于*

1
2
3
4
5

</count<<endl;
</endl;
</endl;
</step;i++)
</count<<endl;
</endl;
</step;i++)
</endl;
</step;i++)
</datac<<endl;

11 0

20 0
【Java 基础语法】深度剖析 Java 中的数组（1）

45 0

34 0
Go基础（复杂类型）：指针
Go语言指针 Go 具有指针。 指针保存了变量的内存地址。 类型 *T 是指向类型 T 的值的指针。其零值是 nil。
896 0

#include swap(int *p1, int *p2){ int temp; temp = *p1; *p1 = *p2; *p2 = temp; } exchange(int *ep1, int *ep2, ...
508 0

484 0

Author： bakari   Date: 2012.8.8 做好总结我觉得是把知识学扎实必不可少的实践环节。这个知识点是当初自己在学习这一块做的一些笔记，现在在知识提升的情况下将它重新整理一下以作巩固之用。
591 0
C++中的指针和数组
-------------------------------------------Section 0 前言-------------------------------------------写个简单的yuv读取的库，卡在多维数组动态分配的问题上。
865 0
+关注

10年ORACLE/MYSQL DBA，有一定C/C++基础
661

0