#c #pointers #static #storage-class-specifier
#c #указатели #статический #спецификатор класса хранилища
Вопрос:
Если у меня есть статическая переменная:
static int a;
И я хочу, чтобы указатель указывал на эту переменную, должен ли указатель выглядеть так:
static int* f;
f=amp;a;
И если я верну это f в вызов функции с помощью оператора присваивания указателю типа static int *, будет ли эта переменная доступна в этой функции?
Также:
int a;
static int* f;
f=amp;a; // does this mean now a is a static variable and it will be retained until the program ends?
static int b;
int* c;
c=amp;n; // is this possible?
Ответ №1:
int a;
static int* f;
f=amp;a; // does this mean now a is a static variable and it will be retained until the program ends?
«Означает ли это, что теперь a является статической переменной»?
Нет, это не так. static
Свойство применяется только к переменной, которую вы явно определяете как static
. В приведенном выше примере только f
есть static
. Время жизни объекта a
закончится, когда закончится окружающая его область видимости, что сделает любой указатель на него недействительным в этот момент.
static int b;
int* c;
c=amp;n; // is this possible?
«Возможно ли это?»
Да, это нормально. Время жизни локальных статических переменных — это полное время жизни программы. И глобальные переменные (статические или нет) также имеют время жизни полной программы. Это означает, что указатели на них всегда будут оставаться действительными.
Эта ссылка на спецификатор класса хранилища может быть полезна для чтения.