我正在查看一些我没有编写的代码,并想要帮助理解其中的一个元素。代码存储字符数组,创建指向这些数组的指针(将指向数组地址的指针分配)。看起来它然后创建一个数组来存储这些字符指针地址,我只是想要一些关于我所看到的东西的澄清。我还对在创建数组时使用双重(**)感到困惑。
下面是一个精简和简化的例子,以便更好地理解。
当使用数组时,他们将其作为参数传递给函数。
下面是一个精简和简化的例子,以便更好地理解。
char eLangAr[20] = "English";
char fLangAr[20] = "French";
char gLangAr[20] = "German";
char* eLangPtr = eLangAr;
char* fLangPtr = fLangAr;
char* gLangPtr = gLangAr;
char **langStrings [3]=
{
&eLangPtr,
&fLangPtr,
&gLangPtr
};
当使用数组时,他们将其作为参数传递给函数。
menu (*langStrings[0]);
所以,这个想法是将字符数组值“英语”传递给函数,但我不知道如何做到。他们将存储在langStrings函数位置0处的值的副本传递给菜单函数,这将是eLandPtr的地址?如果有人能用英语解释一下这个过程,那就太好了。可能只是因为经历了漫长的一天,但我的头脑根本无法理清这一点。
langStrings[0]
的值为&eLangPtr
。取消引用后,*langStrings[0]
将给出&eLangPtr
指向的内容,即eLangAr[20]
的地址。**
是因为&eLangPtr
是一个char
指针的地址。所以langStrings
是一个指向 char 指针的指针数组,即char **
。 - lurkerLangPtr
变量其实并不必要,因为数组会自动退化成指针。 - hegel5000char **langStrings [3]= { &eLangAr, ...
和char **langStrings [3]= { &eLangPtr, ...
是不同的。 - john