C指针异常,请解释



我有一个函数,这个函数的基本思想是改变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]

相关内容

  • 没有找到相关文章

最新更新