2012-06-27 234 views
3

在C中,當我創建任何n元組並嘗試使用它時,我只能使用它的最後一個元素。即使類型顯然是元組的最後一個元素,而不是元組本身。我怎樣才能獲得最後一個元素以外的元素?我通過規範快速查看,並沒有看到它。如何獲取兩個元組的最後一個元素以外的元素?

例子:

#include <stdio.h> 

int f() {return 2;} 
char* g() {return "dudebro";} 

int main() { 
    printf("%d\n", (f(),g(),3)); /* Should print the address of the tuple (unless it's by-value, in which case it should be a compile error) but prints the last element?*/ 
    return 0; 
} 

運行:

$ gcc -ansi -pedantic -Wall -Wextra tt.c -o tt 
$ ./tt 
3 

回答

2

當你在這樣的逗號中放置一堆值時,C將放棄除最右邊的值之外的所有值。它會評估F和G,但忽略它們。我不確定你爲什麼會認爲應該發生的事情。

+0

ohhhhhhhhhh。大聲笑。 – megazord

5

有作爲下一個元組你有什麼有一個使用comma operator沒有這樣的事情。

如果你想整理C中的相關數據,你需要定義和使用一個結構。如果你想打印出所有的數據項,你需要明確地調用printf(或使用多個格式說明符)。

例如

typedef struct Foo { 
    int a; 
    char *b; 
}; 

Foo foo; 
foo.a = 5; 
foo.b = "hello"; 

printf("%d %s\n", foo.a, foo.b); 
+0

什麼?爲什麼它讓我編譯元組呢?逗號怎麼能成爲一個操作符?它是否讓你重載一個元組的構造? – megazord

+0

@megazord:它編譯是因爲它是有效的代碼,它只是不會做你期望的。 –

+0

然後呢? – megazord

相關問題