我发现和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