C 在函数声明中将指针声明为参数的3种方法是什么?

C 在函数声明中将指针声明为参数的3种方法是什么?,c,C,我发现并了解了这种方法: void PrintString(char *String_Ptr) { //Print String } 我找不到任何其他方法在函数声明中将指针声明为参数 我被引导去相信还有其他方法可以从家庭作业问题中做到同样的事情 除了问题中提到的以外,还有一些可能性 以下内容与问题中的版本完全相同,尽管有欺骗性的语法表明String\u Ptr是一个数组。它不是,它是一个指针: void PrintString(char String_Ptr[]) { prin

我发现并了解了这种方法:

void PrintString(char *String_Ptr)
{
    //Print String
}
我找不到任何其他方法在函数声明中将指针声明为参数


我被引导去相信还有其他方法可以从家庭作业问题中做到同样的事情

除了问题中提到的以外,还有一些可能性

以下内容与问题中的版本完全相同,尽管有欺骗性的语法表明
String\u Ptr
是一个数组。它不是,它是一个指针:

void PrintString(char String_Ptr[])
{
    printf("%s\n", String_Ptr);
}
如果知道要传递给
PrintString()
的字符数组的长度(例如,10个字符),还可以传递指向此类数组的指针:

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
}

我猜诀窍在于
const
@theIrishUser:被弃用的标签不能让你写出糟糕的问题。在你的岗位上投入一些精力。解释你为什么相信还有其他方法,你自己尝试了什么,你遇到了什么困难,等等。具体说明你的问题。@theIrishUser,是的,大多数家庭作业问题现在被归类为过于本地化。如果您遇到问题并将其缩减为特定元素,它有时会变成一个适当的、可重用的问题。作为参考,@KerrekSB我真的相信我在我的帖子上付出了最大的努力。(这个标签被否决了,正是因为我们认为一个问题是否是家庭作业不应该对你在提出问题时应该付出的努力产生任何影响。)
printary10
的参数形式与原始问题中的参数形式相同(
T*
with
T=char[10]
),因此,到目前为止,这只是一种选择……我想说的是,虽然这与我的大学作业有关,但不是家庭作业。我没有被要求做这个问题,我正在努力发展我对指针和函数的理解。谢谢你的邀请help@KerrekSB参数的类型在
printaray10()
PrintString()
中有所不同
char(*)[10]
char*
不同。两者的解引用方式不同,指针算法也不同。向它们添加1不仅会产生不同的指针类型,还会产生不同的指针值。@AlexeyFrunze:是的,但它们的形式相同。否则,我可以发布
char*
int*
double*
,并称之为答案!OP要求“声明指针的三种不同方法”。答案肯定不仅仅是
int*
char*
Foo*
,不是吗?在这方面,您的第二段代码与OP自己的示例没有什么不同(只是类型不同:
typedef char Foo[10];
)。