什么类型是对数组变量的引用?

我有以下代码:

/* * Pointer to a function that reads a codesegment */ typedef bool (*BRCS)(void *, uint32, uint64 *, uint64 *, const char **, const char **); BRCS get_prog_id; /* * 'get_prog_id' is loaded from a dynamic library */ uint64 start_o; uint64 length_o; char prog_id[256]; char err[256]; get_prog_id(NULL, 0, &start_o, &length_o, &prog_id, &err); 

当我运行我的编译器时,我收到以下警告:

 passing argument 5 of get_prog_id from incompatible pointer type passing argument 6 of get_prog_id from incompatible pointer type 

所以,它抱怨我最后两个论点没有char **

我糊涂了。 我的理解是表示TYPES数组的变量等同于指向TYPE的指针。 因此,应用&运算符会给你一个指向TYPE指针的指针。

我在这里想念的是什么?

这里有两个问题:

(1)

&prog_id的类型不是char * ,它是char (*)[256] ; 即指向char-array-of-length-256的指针。

(2)

即使你可以得到一个char ** (例如char *prog_id = malloc(256); &prog_id ), char **const char ** 兼容,原因有点模糊。 最好的解释如果可能在这里: http : //c-faq.com/ansi/constmismatch.html 。

指针和数组类型仅相当于一个级别。 每当另一层次的间接发挥作用时,它们就不再相同了。

如果你想一下在这种情况下应该使用什么指针算法,那么理解这个是最简单的。 考虑以下定义:

 typedef char tenchars[10]; tenchars *x; 

现在, &(x[1]) (即x+1 )应该表示“ x加10个字符的地址”,对吧? 但是如果我做以下事情怎么办:

 char **y = (char **)x; 

&(y[1])现在意味着什么?为什么?

换句话说: 指针数组与数组数组不同。 因此,指向指针的指针与指向数组的指针不同。