Можно ли инициализировать структуру const без использования функции? - PullRequest
12 голосов
/ 14 октября 2008

У меня есть довольно простая const структура в некотором C-коде, которая просто содержит несколько указателей и хотела бы статически инициализировать ее, если это возможно. Могу ли я и если да, то как?

Ответы [ 4 ]

15 голосов
/ 14 октября 2008

Вы можете, если указатели указывают на глобальные объекты:

// In global scope
int x, y;
const struct {int *px, *py; } s = {&x, &y};
5 голосов
/ 14 октября 2008
const struct mytype  foo = {&var1, &var2};
1 голос
/ 14 октября 2008

Константная структура может только быть статически инициализированной.

0 голосов
/ 10 сентября 2010

Но если есть некоторые struct, как указано ниже:

struct Foo
{
    const int a;
    int b;
};

и мы хотим динамически создать указатель на struct, используя malloc, поэтому мы можем разыграть трюк:

struct Foo foo = { 10, 20 };
char *ptr = (char*)malloc(sizeof(struct Foo));
memcpy(ptr, &foo, sizeof(foo));
struct Foo *pfoo = (struct Foo*)ptr;

это очень полезно, особенно когда какой-то функции необходимо вернуть указатель на struct Foo

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