我發現和understoof這個方法:在函數聲明中聲明一個指針作爲參數的3種方法是什麼?
void PrintString(char *String_Ptr)
{
//Print String
}
我無法找到任何其他方法來聲明一個指針的函數聲明的參數。
我被認爲還有其他方法可以從作業問題中做同樣的事情。
我發現和understoof這個方法:在函數聲明中聲明一個指針作爲參數的3種方法是什麼?
void PrintString(char *String_Ptr)
{
//Print String
}
我無法找到任何其他方法來聲明一個指針的函數聲明的參數。
我被認爲還有其他方法可以從作業問題中做同樣的事情。
除了問題中提到的其他幾種可能性。
儘管錯誤的語法暗示String_Ptr
是一個數組,但它與問題中的版本完全相同。它不是,它是一個指針:
void PrintString(char String_Ptr[])
{
printf("%s\n", String_Ptr);
}
如果你知道字符(比如,10個字符),你想傳遞給PrintString()
的數組的長度,還可以將指針傳遞給這樣的一個數組:
void PrintArray10(char (*Array_Ptr)[10])
{
printf("%s\n", *Array_Ptr); // assuming the array is '\0'-terminated
}
int main(void)
{
char a[10] = "Blah!";
PrintString(a); // first 2 methods
PrintArray10(&a); // 3rd method
return 0;
}
您還可以typedef
僞裝指針:
typedef char* pchar;
void PrintString(pchar String_Ptr)
{
printf("%s\n", String_Ptr);
}
typedef char (*pchararr10)[10];
void PrintArray10(pchararr10 Array_Ptr)
{
printf("%s\n", *Array_Ptr); // assuming the array is '\0'-terminated
}
'PrintArray10'的參數與原始問題('T *',T = char [10]')的參數形式相同,所以目前只有*一個*替代方案... –
I'我想提一下,雖然這與我的大學工作有關,但它不是家庭作業。我沒有被要求做這個問題,我正在努力發展我的理解指針和功能。感謝您的幫助 – theIrishUser
@KerrekSB參數的類型在'PrintArray10()'和'PrintString()'中是不同的。'char(*)[10]'與'char *'不一樣。兩者的解引用方式不同,兩者的指針運算不同。給它們加1不僅會產生不同的指針類型,還會產生不同的指針值。 –
我猜的伎倆是'const'。 – chris
@theIrishUser:被棄用的標籤並不能寫出很差的問題。爲你的文章付出一些努力。解釋爲什麼你相信有其他方式,你自己試過了什麼,卡住的地方等等。具體說明你的問題。 –
@theIrishUser,是的,現在大多數家庭作業問題都被歸類爲過於本地化。如果你遇到了麻煩,並把它分解成一個特定的元素,它有時會變成一個適當的,可重用的問題。作爲參考,http://meta.stackexchange.com/questions/147100/the-homework-tag-is-now-officially-deprecated – chris