【问题标题】:Passing a pointer to a char array as an argument to a function - C将指向 char 数组的指针作为参数传递给函数 - C
【发布时间】:2015-03-17 22:42:01
【问题描述】:

在下面的函数声明中,第一个参数是一个字符串,特别是一个字符数组,第三个参数是一个指向整数的指针。第二个参数是指向字符数组的指针吗?换句话说,一个指向指针的指针?在阅读了相关问题的答案后,我发现了这一点:Difference between passing array and array pointer into function in C

void setup(char inputBuffer[], char *args[], int *background) {...}

换句话说,*args[] 是否等同于 **args?

非常感谢!

【问题讨论】:

  • 您可能想了解the spiral/clockwise rule
  • 这太不可思议了,谢谢@JoachimPileborg
  • 我很确定在函数声明中它确实是等价的。
  • 指向字符数组的指针是char (*ptr)[]。一个指针数组是char *ary[]arychar **ary 相同,因为它衰减为指针。 ptr 不能衰减,因为它本身不一定是数组。差异可能很重要。

标签: c arrays pointers


【解决方案1】:

是的,在将参数传递给函数时,char *args[] 等效于 char **args

在第一个参数char inputBuffer[] 中,函数实际上接收的不是整个char 数组,而是一个保存其第一个元素地址的指针变量。

在第二个参数char *args[] 中,类似地,函数接收的不是指向chars 的整个指针数组,而是一个保存第一个元素地址的指针变量。在这种情况下,元素本身就是一个指针。因此该函数接收到一个指向char 的指针,相当于char **args

【讨论】:

    【解决方案2】:

    *args[] 等价于**args。将数组作为函数参数传递时,会传递指向数组开头的指针(例如第一个元素)。因此,您不知道传递给函数的数组的大小,通常数组的大小是在另一个函数的参数中传递的。

    在您的特定情况下,char* args[] 是一个字符串文字数组。要更好地理解该机制,请参阅question 6.4 from C-FAQ。此链接意味着:

    由于数组会立即衰减为指针,因此数组永远不会真正传递给函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-17
      • 2021-12-02
      • 2017-08-09
      • 1970-01-01
      • 2016-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多