AFAIK 这就是你想要的:
struct stu
{
char **argv; // *argv[] will give you "error: flexible array member not at end of struct"
int a;
};
struct stu Stu; // Allocate Stu as a global stu struct
fun(int argc, char * argv[]) {}
int main()
{
char input[128];
char *argies[2]; // Static allocation of space for argv to point to
struct stu *ptr = &Stu;
ptr->argv = argies; // You need to assign argv to point to allocated space
ptr->argv[0] = "name";
ptr->argv[1] = input;
fun(2, ptr->argv); // is 2nd argument we passing member of array argv??
}
如果你没有声明一个实际的 stu 结构,那么 ptr 将被初始化为零。此外,如果您确实声明了一个静态结构 stu(上面的 Stu)但不初始化 argv 指针,则 argv 指针将被初始化为零。不是指向“谁知道在哪里”,而是指向一个非常具体的地方。
请注意,输入不是以 NULL 结尾的,实际上它没有被初始化,因此变量名称“argv”可能会产生误导,因为大多数程序员可能会假设任何 char **argv 都包含以 NULL 结尾的 C 字符串。此外,您可能希望将 argies 的维度设为 3,并将 NULL 放在第三个位置。
您可以将 ptr->argv[0](字符串“名称”)作为 *(ptr->argv) 传递,但有趣的原型必须是 fun(int argc, char * argv)。
**ptr->argv 是一个字符。
*ptr 是一个结构体。
**ptr 是一个错误。