什么类型是对数组变量的引用?
我有以下代码:
/* * 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])
现在意味着什么?为什么?
换句话说: 指针数组与数组数组不同。 因此,指向指针的指针与指向数组的指针不同。