【发布时间】:2021-02-15 13:45:28
【问题描述】:
所以我想编写一个函数来使用指针数组反转链表,但我收到警告:来自不兼容指针类型 [-Wincompatible-pointer-types] 的赋值。我想将指向列表节点的指针存储在指针数组int **s = (int **)calloc(10, sizeof(int)); 中,并认为s[*top] = *l 将分配指向**l 指向*top 数组*s[] 的第一个元素的指针。那么我错误地认为数组*s[] 的元素是指针吗?如果有人可以向我解释,我会很高兴。这是整个代码(除了我创建列表的部分):
typedef struct list {
int v;
struct list *next;
} list;
void reverseListS(list **l, int **s, int *top) {
while ((*l)->next != NULL) {
s[*top] = *l;
*top++;
*l = (*l)->next;
}
list *temp = *l;
while (!(*top == 0)) {
temp->next = s[*top];
*top--;
temp = temp->next;
}
temp->next = NULL;
}
int main() {
int **s = (int **)calloc(10, sizeof(int));
int *top = 0;
reverseListS(&l, s, top);
}
【问题讨论】:
-
提供的代码没有意义。例如代替 int **s = (int **)calloc(10, sizeof(int));你至少应该写 int **s = (int **)calloc(10, sizeof(int *));
-
很多问题。就在
main:应该是sizeof(int *)(或sizeof *s)。虽然,我认为你希望s是一个整数数组,所以它应该是一个int *。而top没有指向任何地方——为什么它甚至是一个指针?l未初始化.... -
您可能应该从一段更简单的代码开始,比如填充一个列表并打印它。一旦它起作用,增加更多的复杂性。解开这段代码是不可行的,扔掉它重新开始吧。
-
@JohnnyMopp 我说我跳过了初始化
list *l,我可以编辑它。我认为sizeof(int *)和sizeof(int)之间没有区别,因为用于存储整数的字节数与指向整数的指针相同(如果我错了,请纠正我)。我将top设为一个指针,这样在函数内部更改它的值也会在外部影响它。如果s是一个整数数组,我可以分配一个指向存储在该数组中的值的指针吗?因为我试图这样做,但它没有用,并且用谷歌搜索你不能真正指向一个指向存储在整数变量中的地址的指针。 -
通常,无论类型如何,指针大小都是相同的,但这并不能保证。 Are all data pointers the same size in one platform for all data types?