我有一些Foo類,我想按如下操作。我有一些指向Foo對象的靜態實例,然後,在一些函數中,我希望有一個可以充當它們的通用指針。例如,如何別名指針
Foo *either;
if (some_variable == 1)
{
either = foo1;
}
else
{
either = foo2;
}
這是我沒有料到它的工作,但它似乎並沒有被正常。通常情況如何?當我使用它時,我要麼實際上是foo1或foo2。
我有一些Foo類,我想按如下操作。我有一些指向Foo對象的靜態實例,然後,在一些函數中,我希望有一個可以充當它們的通用指針。例如,如何別名指針
Foo *either;
if (some_variable == 1)
{
either = foo1;
}
else
{
either = foo2;
}
這是我沒有料到它的工作,但它似乎並沒有被正常。通常情況如何?當我使用它時,我要麼實際上是foo1或foo2。
它爲我
#include <stdio.h>
typedef struct Foo Foo;
struct Foo {
int data;
};
void test(Foo *foo1, Foo *foo2, int first) {
Foo *either;
if (first == 1)
{
either = foo1;
}
else
{
either = foo2;
}
printf("either->data is %d\n", either->data);
}
int main(void) {
Foo bar, baz;
bar.data = 42;
baz.data = 2011;
test(&bar, &baz, 0);
test(&bar, &baz, 1);
return 0;
}
也可在codepad。
我猜你是在分配foo1和foo2之前分配的。你的代碼貼出轉讓或者要麼foo1或foo2的的當前價值,而不是到未來值。爲了在foo1或foo2更改後保持正確,它需要是指向它所引用的指針。
static Foo *foo1, *foo2;
Foo **either;
if(some_variable == 1) {
either = &foo1;
} else {
either = &foo2;
}
由於這兩個現在是一個指針的指針的對象,則需要取消對它的引用纔可使用。例如:
if(*either == foo1) printf("either is foo1\n");
else if(*either == foo2) printf("either is foo2\n");
else printf("either isn't foo1 or foo2\n");
此代碼將允許要麼繼續指向任何foo1或foo2的是後foo1或foo2的變化。
您能詳細一點它是如何運作的,你期待什麼? – fbrereto 2011-03-23 23:42:22
這是一個指針是什麼 - 什麼不工作? – 2011-03-23 23:42:50
代碼你,你說你要 – pajton 2011-03-23 23:46:18