Установка значения указателя в структуре

#c #pointers #struct

#c #указатели #структура

Вопрос:

У меня есть структура, подобная так:

 typedef struct foo {
   int *bar;
   foo();
} foo;
  

и произнесите int следующим образом : int i = 2; .

если я хочу int* p1 = new int; указать, на i что я просто иду: p1 = amp;i;

Как мне foo.bar указать на i ?

Я думаю, что конструктор должен выполнить следующее:

 foo::foo() {
   bar = new int;
}
  

Но я не знаю, как foo.bar указать на i .

Комментарии:

1. Это определенно не C. функция как член внутри структуры недопустима в C.

2. Это вопрос C или C ? Потому что ваша структура написана на C, а new ключевое слово — C .

3. Похоже, вы хотите иметь утечку памяти. Здесь p1 = amp;i; вы пропускаете p1 указатель на объект, на который указывали раньше.

4. Похоже, здесь есть путаница идей. (например: в C вам не нужны typedef структуры, вызов bar = new int; выглядит так, как будто это вызовет утечку памяти при переназначении ее позже, и я не понимаю, в чем ваша проблема при присвоении значения (или где у вас есть экземпляр структуры))

5. Извините, это c . По сути, я спрашиваю, что эквивалентно p1 = amp;i указателю, который был членом структуры? foo.bar = amp;i ? Как мне получить доступ к int, на который теперь указывает bar ? foo.*bar ?

Ответ №1:

в реальном примере вы должны заставить конструктор «foo ()» инициализировать bar и dtor, который его удаляет; это всего лишь пример того, как использовать указатель на структуру для доступа к членам:

 #include <iostream>
using namespace std;

typedef struct foo
{
    int* bar;
    foo(){}

}FOO, *PFOO;


int main(int argc, wchar_t *argv[])
{

    struct foo* ptrFoo = new foo;
//  PFOO pFoo = new foo; // you can use this also 
    ptrFoo->bar = new int(10);

    cout << ptrFoo->bar << endl;
    cout << (*ptrFoo).bar << endl;
    cout << *ptrFoo->bar << endl;
    cout << *(*ptrFoo).bar << endl;

    delete ptrFoo->bar;
    ptrFoo->bar = NULL;

    delete ptrFoo;
    ptrFoo = NULL;


    std::cin.get();
    return 0;
}
  

Ответ №2:

Я решил эту проблему.

Несколько человек были правы в отношении утечки памяти.

 typedef struct foo {
        int *bar;
} foo;
  

Для сохранения элемента указателя структуры:

 int main() {
   foo fooIn;
   int i = 2;

   fooIn.bar = amp;i; // have the int pointer 'bar' point to the value i;

   int *barVal = (int*)fooIn.bar;
   printf("bar points to: %d, *barVal) // prints "bar points to: 2"
  

}