使用函数指针作为结构成员初始化并应用结构参数

时间:2017-09-07 09:50:42

标签: c oop function-pointers

在以下代码中:

Public Sub test()
Dim cell As Range
For i = 1 To Range("A1:A4").Rows.Count
 Set cell = Range("a" & i)
    If cell = 1 Then
    cell.EntireRow.Delete
    i = i - 1
End If
Next i
End Sub

结构#include <stdio.h> #include <stdlib.h> typedef struct{ int a; int b; int (*func1)(); int (*func2)(); }STR_X2; void init(STR_X2 self , int _a , int _b){ self.a = _a; self.b = _b; printf("Init a:%d, b:%d \n",self.a,self.b); } int multiply(STR_X2 self){ printf("Multiply a:%d, b:%d, res:%d\n",self.a,self.b,self.a*self.b); return self.a*self.b; } int main(void) { static STR_X2 val2; val2.func1 = init; val2.func2 = multiply; printf("set values of a and b using init() function\n"); val2.func1(val2,3,5); printf("result:%d\n",val2.func2(val2)); printf("\nset values of a and b directly\n"); val2.a=3; val2.b = 5; printf("result:%d\n",val2.func2(val2)); return EXIT_SUCCESS; } 有两个成员作为函数指针。

  • STR_X2设置为func1,并且参数init()a的值。
  • b设为func2并与multiply()a
  • 相乘

通过运行代码,我得到以下结果:

b

表示使用set values of a and b using init() function Init a:3, b:5 Multiply a:0, b:0, res:0 result:0 set values of a and b directly Multiply a:3, b:5, res:15 result:15 初始化参数不起作用。
有人能帮我找到这段代码有什么问题吗?
谢谢

1 个答案:

答案 0 :(得分:1)

您按STR_X2init中的值multiply拍摄了 - 这会导致副本。用指针取代它来修改你在static中声明的main实例。