#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"
}