2016-05-12 26 views
0

我已經學會了如何使用函數和結構和指針。我想把它們合併成一個。但是我編寫的代碼似乎不起作用。編譯器告訴我測試是一個未聲明的標識符。下面是代碼:如何在C中使用結構體,指針和函數?

#include <stdio.h> 
#include <stdlib.h> 

struct character 
{ 
    int *power; 
}; 

void test (use_power) 

int main() 
{ 
    test (use_power) 
    printf("%d\n",*power); 

    return 0; 
} 

void test() 
{ 
    int use_power = 25; 
    struct character a; 
    a.power = &use_power; 
} 
+2

這段代碼是什麼?它是完全錯誤的,它在很多方面都是錯誤的,它只是一小段代碼。 –

+0

「編譯器告訴我測試是一個未聲明的標識符。」......這就是它告訴你的嗎? – DigitalNinja

+0

@DigitalNinja它必須停止在* first *錯誤,所有程序都是錯誤的。 –

回答

0

你的代碼似乎是錯誤的。您的test定義不包含參數作爲

void test() 
{ 
    int use_power = 25; 
    struct character a; 
    a.power = &use_power; 
} 

但你的原型包含一個參數

void test (use_power) 

被誤置於。首先在你的原型聲明結尾處沒有分號;,其次通過查看你的代碼,use_power是一個變量而不是數據類型,因此它不能僅僅出現在函數聲明中。

您將收到參數不匹配錯誤。

您已經使用了線main()

printf("%d\n",*power); 

這是絕對錯誤的。如果沒有結構變量,則無法訪問結構的任何成員。

再次,你沒有提到你調用不正確test();此行

之前,當你還沒有把你的問題那麼正確,我必須弄清楚你希望達到的目標。我打賭你想要在結構的指針成員中保存一個整數的地址,然後打印它的值。

下面是一個代碼片段,它可以按照您的需求工作。

#include <stdio.h> 
#include <stdlib.h> 

struct character 
{ 
    int *power; 
}; 
struct character a; //define a structure variable 

void test(); 

int main() 
{ 
    test(); 
    printf("%d\n",*(a.power)); // print the member of structure variable a 

    return 0; 
} 

void test() 
{ 
    int use_power = 25; 
    a.power = &use_power; 
} 
+0

非常感謝!這完全是我在找的東西!再次感謝! –

+0

我不知道我能做到這一點。如果我知道的話,我會這麼早做的! –

+0

非常感謝您的合作。 –

1

你的代碼有很多錯誤甚至不能編譯

  1. 多缺少分號。的test()
  2. 隱此處的聲明

    test (use_power) 
    

    與缺少分號了。

  3. power未在main()中聲明。

  4. 此行

    void test use_power() 
    

    沒有意義和無效,也沒有分號。

  5. 在端部所確定的test()實例a是本地test()和因此將被釋放時test()回報。 use_powerint,具有完全相同的問題,並試圖從函數中提取它的地址是無用的,因爲函數返回後無法訪問它。

我不知道你在做什麼,但這可能是?

#include <stdio.h> 
#include <stdlib.h> 

struct character { 
    int *power; 
}; 

/* Decalre the function here, before calling it 
* or perhaps move the definition here 
*/ 
void test(struct character *pointer); 
/*        ^please */ 

int 
main(void) /* int main() is not really a valid signature */ 
{ 
    struct character instance; 
    test(&instance); 
    if (instance.power == NULL) 
     return -1; 
    printf("%d\n", *instance.power); 
    free(instance.power); 
    return 0; 
} 

void 
test(struct character *pointer) 
{ 
    pointer->power = malloc(sizeof(*pointer->power)); 
    if (pointer->power != NULL) 
     *pointer->power = 25; 
} 
+0

測試是一個函數的名稱。我認爲他的意思是轉發聲明一個名爲test的函數,它接受一個名爲use_power的參數。不幸的是,當他實際定義測試時,它並不帶參數,但它修改了不存在的use_power參數。或者,也許我有這個錯誤 - 很難說。 –

+0

我想也許答案是完全刪除這一行:'void test use_power()',並從main中的測試函數調用中移除use_power參數。那麼至少這是有道理的。 –

+0

好的...但是,你不能使用指針來獲得超出void test範圍的值嗎?我試圖在struct中聲明一個指針。在函數中使用該指針。然後在主函數中輸出結果。 –

0

例如

#include <stdio.h> 

struct character { 
    int *power; 
}; 

void test(struct character *var); 

int main (void){ 
    struct character use_power; 
    int power = 5; 

    use_power.power = &power; 
    test(&use_power); 
    printf("%d\n", power); 

    return 0; 
} 

void test(struct character *var){ 
    int use_power = *var->power; 
    *var->power = use_power * use_power; 
}