#include <stdio.h>
// Forward declaration: Here is the name of the structure
// but field-details are omitted.
struct IO_config_t;
// typedef of the structure
// Still no details on the fields.
typedef struct IO_config_t IO_config_t;
// The parameter is listed.
typedef void (*IO_fun_ptr_t)(IO_config_t* input);
// Now we actually detail the members of the structure
struct IO_config_t{
int address;
IO_fun_ptr_t IO_fun_ptr; //pointer to the function to be used
};
void print_address (IO_config_t *input){
printf("The address is %d \n", input
->address
); printf("Push any key to continue:"); }
void main()
{
IO_config_t input = {.address = 16,
.IO_fun_ptr = &print_address};
input.IO_fun_ptr(&input);
}
CiAgICAjaW5jbHVkZSA8c3RkaW8uaD4KIAogICAgLy8gRm9yd2FyZCBkZWNsYXJhdGlvbjogSGVyZSBpcyB0aGUgbmFtZSBvZiB0aGUgc3RydWN0dXJlCiAgICAvLyBidXQgZmllbGQtZGV0YWlscyBhcmUgb21pdHRlZC4KICAgIHN0cnVjdCBJT19jb25maWdfdDsKCiAgICAvLyB0eXBlZGVmIG9mIHRoZSBzdHJ1Y3R1cmUKICAgIC8vIFN0aWxsIG5vIGRldGFpbHMgb24gdGhlIGZpZWxkcy4KICAgIHR5cGVkZWYgc3RydWN0IElPX2NvbmZpZ190ICBJT19jb25maWdfdDsKCiAgICAvLyBUaGUgcGFyYW1ldGVyIGlzIGxpc3RlZC4KICAgIHR5cGVkZWYgdm9pZCAoKklPX2Z1bl9wdHJfdCkoSU9fY29uZmlnX3QqIGlucHV0KTsKCiAgICAvLyBOb3cgd2UgYWN0dWFsbHkgZGV0YWlsIHRoZSBtZW1iZXJzIG9mIHRoZSBzdHJ1Y3R1cmUKICAgIHN0cnVjdCBJT19jb25maWdfdHsKICAgICAgaW50ICAgICAgICAgICAgICAgICAgIGFkZHJlc3M7CiAgICAgIElPX2Z1bl9wdHJfdCAgICAgICAgICBJT19mdW5fcHRyOyAvL3BvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIHRvIGJlIHVzZWQKICAgIH07CiAgICAKICAgIHZvaWQgcHJpbnRfYWRkcmVzcyAoSU9fY29uZmlnX3QgKmlucHV0KXsKICAgICAgcHJpbnRmKCJUaGUgYWRkcmVzcyBpcyAlZCBcbiIsIGlucHV0LT5hZGRyZXNzKTsKICAgICAgcHJpbnRmKCJQdXNoIGFueSBrZXkgdG8gY29udGludWU6Iik7CiAgICAgIGdldGNoYXIoKTsKICAgIH0KICAgIAogICAgdm9pZCBtYWluKCkKICAgIHsKICAgICAgSU9fY29uZmlnX3QgICAgICAgICAgICAgaW5wdXQgPSB7LmFkZHJlc3MgPSAxNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLklPX2Z1bl9wdHIgPSAmcHJpbnRfYWRkcmVzc307CiAgICAKICAgICAgaW5wdXQuSU9fZnVuX3B0cigmaW5wdXQpOwogICAgCiAgICB9