2013-07-17 49 views
-4

說我有這樣的代碼:更改內部函數原有指針式

int * p = 7; 
f(p); 
printf(p); 

寫函數f,使3號線將打印0

我想剛纔說P = 0,但我不認爲,函數內部的地址與廣義函數內部的地址相同,所以只需要懂得這一點的人一點點幫助。

謝謝!

+0

你想改變p的地址嗎?或價值? –

+0

@Pierre「寫入函數f,以便第3行打印0.」 – glglgl

+4

目前還不清楚問這個問題背後的推理是什麼,所以很難知道什麼會構成一個好的答案。 –

回答

0

更正你的問題

  1. int *p是一個指向整數的指針,所以你不能給它分配一個數字。

如果我理解你的問題是正確的,你需要一個指針的值在函數內被修改。

int main() 
{ 
    int i = 3; 
    function (&i); 
    printf("i=%d\n",i); 
    return 0; 
} 

代碼描述:

void function (int *p) 
{ 
    int i = 0; 
    if(NULL == p) 
    { 
     printf("Input argument is NULL"); 
     return; 
    } 
    /* Change the value of the pointer */ 
    *p = i; 
} 

如下您可以調用這個函數

當你傳遞函數指針,其實是創建指針變量的副本,這反過來又指向與原始指針相同的地址。儘管指針副本在function()退出後,您希望修改的地址處的值將丟失。

+0

謝謝,這就是我的意思。 –

+0

歡迎。很高興知道它有幫助。 –

-1

通常人們不希望7爲指針值,所以最有可能你想要的變量是int num = 7;

void f(int* pNum) { 
    *pNum = 0; 
} 

int main() { 
    int num = 7; 
    f(&num); 
    printf("%d",num); 
    return 0; 
} 

,但如果你想有相同的語法與您現有的代碼,然後

void f(int * p) { 
    strcpy(p,"0"); 
} 

int main() { 
    int * p = malloc(2); // let's change to valid address 
    f(p); 
    printf(p); 
    return 0; 
} 
+0

爲什麼我得到了投票?請評論? –

+0

你的第一個代碼片段不回答發佈的問題。你的第二個例子是瘋狂破碎。你有沒有試過編譯和運行它? – Blastfurnace

+0

我的片段試圖猜測他在現實生活中真正想要的東西;它假設OP是新手,我做了一些錯誤更正。在第一種情況下,通常人們不希望'7'作爲指針值,所以最可能他想要的變量是'int num = 7;'。至於第二個答案,假設他真的想使用該值作爲格式將指針值傳遞給'f()',然後使用'printf()',那麼'f()'應該複製該字符串。當然'7'作爲地址會導致問題,但是當正確初始化時,'f()'應該完成這項工作。 –