使用C中的双指针和数组的模糊结果

时间:2012-10-08 14:24:49

标签: c arrays pointers

  

可能重复:
  How do I use arrays in C++?

我有以下C代码:

int main () {
    char *pathvc[MAX_PATHS];
    parsePath(pathvc);

    struct command_t command;

    command.name = lookup(command.argv, pathvc); //command.argv is: char *argv[MAX_ARGS];
}

char* lookupPath(char **argv, char **dir) {
    //Some implementation
}

这是我在main函数中获得的调试信息:

  

名称:pathvc详细信息:{0x804c208“/ usr / lib / lightdm / lightdm”,   0x804c221“/ usr / local / sbin”,0x804c231“/ usr / local / bin”,0x804c240   “/ usr / sbin”,0x804c24a“/ usr / bin”,0x804c253“/ sbin”,0x804c259   “/ bin”,0x804c25e“/ usr / games”,0x0}     默认值:0xbffff0a8十进制:3221221544十六进制:0xbffff0a8     二进制:10111111111111111111000010101000八进制:027777770250

     

名称:pathvc [0]详细信息:0x804c208“/ usr / lib / lightdm / lightdm”

     

名称:pathvc [1]详细信息:0x804c221“/ usr / local / sbin”

     

名称:pathvc [2]详细信息:0x804c231“/ usr / local / bin”

     

名称:pathvc [3]详情:0x804c240“/ usr / sbin”

     

名称:pathvc [4]详细信息:0x804c24a“/ usr / bin”

     

名称:pathvc [5]详细信息:0x804c253“/ sbin”

     

名称:pathvc [6]详细信息:0x804c259“/ bin”

     

名称:pathvc [7]详情:0x804c25e“/ usr / games”

然而,当我在查找函数中传递pathvc时,我得到了这个:

  

名称:dir详细信息:0xbffff0a8默认值:0xbffff0a8十进制:3221221544     十六进制:0xbffff0a8二进制:10111111111111111111000010101000     八进制:027777770250

     

名称:* dir详细信息:0x804c208“/ usr / lib / lightdm / lightdm”

     

姓名:**目录详情:47'/'

为什么我传递一个指向查找函数的指针数组,它接受它作为双指针,但它只指向第一个路径而不是完整的路径列表。

请原谅我,如果我正在做/问一个非常愚蠢的问题,因为我对C中的指针感到不舒服。

2 个答案:

答案 0 :(得分:2)

这只是调试器知道的问题。在调用者中,调试器可以看到有MAX_PATHS个指针。在被调用函数中,它不知道,因此它不知道向您显示多少条目。如果您手动向其他人询问,它会向您显示。

就像这样:

void someFunc(int *j)
{
   // does j point to a single integer? An array? Who knows?
}

void foo(void)
{
   int p = 3;
   int* j = &p;
   // here we know j points to one integer
   someFunc(j);
}

void foo2(void)
{
   int* j[4];
   // here we know j is an array of four pointers
   someFunc(j);
}

答案 1 :(得分:1)

*dirpathvc[0]相同,它只是数组的第一个元素。 **dir不是pathvc[1] pathvc[0][0]。请改用*(dir + 1)dir[1]