說我有這樣的代碼:更改內部函數原有指針式
int * p = 7;
f(p);
printf(p);
寫函數f,使3號線將打印0
我想剛纔說P = 0,但我不認爲,函數內部的地址與廣義函數內部的地址相同,所以只需要懂得這一點的人一點點幫助。
謝謝!
說我有這樣的代碼:更改內部函數原有指針式
int * p = 7;
f(p);
printf(p);
寫函數f,使3號線將打印0
我想剛纔說P = 0,但我不認爲,函數內部的地址與廣義函數內部的地址相同,所以只需要懂得這一點的人一點點幫助。
謝謝!
更正你的問題
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()
退出後,您希望修改的地址處的值將丟失。
謝謝,這就是我的意思。 –
歡迎。很高興知道它有幫助。 –
通常人們不希望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;
}
爲什麼我得到了投票?請評論? –
你的第一個代碼片段不回答發佈的問題。你的第二個例子是瘋狂破碎。你有沒有試過編譯和運行它? – Blastfurnace
我的片段試圖猜測他在現實生活中真正想要的東西;它假設OP是新手,我做了一些錯誤更正。在第一種情況下,通常人們不希望'7'作爲指針值,所以最可能他想要的變量是'int num = 7;'。至於第二個答案,假設他真的想使用該值作爲格式將指針值傳遞給'f()',然後使用'printf()',那麼'f()'應該複製該字符串。當然'7'作爲地址會導致問題,但是當正確初始化時,'f()'應該完成這項工作。 –
你想改變p的地址嗎?或價值? –
@Pierre「寫入函數f,以便第3行打印0.」 – glglgl
目前還不清楚問這個問題背後的推理是什麼,所以很難知道什麼會構成一個好的答案。 –