在下面的函数声明中,第一个参数是一个String,特别是一个chars数组,第三个参数是一个指向整数的指针。第二个参数是指向字符数组的指针吗?换句话说,一个指针指针?我在阅读了相关问题的答案后发现了这一点:Difference between passing array and array pointer into function in C
void setup(char inputBuffer[], char *args[], int *background) {...}
换句话说,* args []相当于** args?
非常感谢!
答案 0 :(得分:1)
*args[]
相当于**args
。在将数组作为函数参数传递时,传递指向数组开头的指针(例如,第一个元素)。因此,您不知道传递给函数的数组的大小,并且通常在另一个函数的参数中传递数组的大小。
在您的特定情况下,char* args[]
是一个字符串文字数组。为了更好地理解该机制,请参阅question 6.4 from C-FAQ。此链接表示:
由于数组会立即衰减为指针,因此数组永远不会传递给函数。
答案 1 :(得分:1)
是的,在将参数传递给函数时,char *args[]
相当于char **args
。
在第一个参数char inputBuffer[]
中,函数实际上不接收整个char
数组,而只接收一个包含其第一个元素地址的指针变量。
在第二个参数char *args[]
中,类似地,函数不接收指向char
s的整个指针数组,而是接收包含第一个元素地址的指针变量。在这种情况下,元素本身就是一个指针。因此,该函数接收指向char
指针的指针,相当于char **args
。