отправить имя параметра структуры в качестве аргумента - PullRequest
0 голосов
/ 16 декабря 2018

Кто-нибудь знает, как отправить имя параметра структуры в качестве аргумента?У меня есть такой код:

typedef struct {
  double x;
  double y;
  double dis;
} Point;

void bucketSort (Point * points, name /*name of parameter*/)
{
  printf("%lf",points.name);
}

И, например, вызов функции, как я ее вижу:

bucketSort(point1,"dis");

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Вы можете определить enum и сохранить все возможные имена.Затем вы можете использовать это enum в качестве параметра вашей функции.

typedef enum {
    ENUM_X = 0,
    ENUM_Y = 1,
    ENUM_DIS = 2
} STRCT_PARAM_NAME;

typedef struct {
  double x;
  double y;
  double dis;
} Point;

void bucketSort (Point * points, STRCT_PARAM_NAME name) {
    switch (name) {
        case ENUM_X: printf("%lf\n", points->x); break;
        case ENUM_Y: printf("%lf\n", points->y); break;
        case ENUM_DIS: printf("%lf\n", points->dis); break;
        default: printf("Invalid\n"); break;
    }
}

Теперь вы можете вызвать bucketSort следующим образом:

bucketSort(points_obj, ENUM_X);
0 голосов
/ 16 декабря 2018

Я думаю, вы не можете отправить имя переменной в качестве параметра Но.Вы можете проверить это, как показано ниже

typedef struct {
  double x;
  double y;
  double dis;
} Point;

void bucketSort (Point * points,char *name /*name of parameter*/)
{
   if(name[0] == 'd' ) printf("%lf",points.dis);
   else if(name[0] == 'x') printf("%lf",points.x);
   else if(name[0] == 'y') printf("%lf",points.y);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...