我有一个函数,这个函数的基本思想是改变a
指向的地方。第一个版本有效,但第二个版本无效。
有人可以帮我理解这里发生了什么吗?
// this works
void swap(int **a) {
int *temp = malloc(sizeof(int) * 3);
temp[0] = 0;
temp[1] = 1;
temp[2] = 2;
*a = temp;
}
// this does not
void swap(int **a) {
*a = malloc(sizeof(int) * 3);
*a[0] = 0;
*a[1] = 1; // seg fault occurs on this line
*a[2] = 2;
}
我是这样调用函数的
int main() {
int b[] = {0,1};
int *a = b;
swap(&a);
return 0;
}
此外,这两个函数不会同时属于同一个文件。
最佳答案
[]
的优先级高于*
(实际上[]
在C中的优先级最高)。这意味着您的表达式是 *(a[0])
而不是您想要的 (*a)[0]
。
关于C指针异常,请解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15622460/