У меня есть фрагмент кода, который я не могу понять, как он работает, из-за одной строки, которая выполняет двойное разыменование. Код выглядит следующим образом:Вызов двойного указателя
void afunction(int**x){
*x = malloc(2 * sizeof(int));
**x = 12;
*(*x + 1) = 13;
}
int main(){
int *v = 10;
afunction(&v);
printf("%d %d\n", v[0], v[1]);
return 1;
}
Я понимаю, что первый элемент указателя на указатель получает значение 12, но линия после того, что я просто не могу понять. Получает ли второй элемент в первом указателе значение 13?
Так что же вам говорит ваш выход? –
Этот код приводит к ошибке выполнения –
Внутри функции 'x' имеет тип' int ** '. Поэтому '* x' имеет тип' int * ', а' * x + 1' - это арифметика указателя: результат является указателем на один * элемент * прошлый '** x'. '* (* x + 1)' обозначает 'int' в этой позиции; он по определению точно эквивалентен '(* x) [1]'. Итак, да, последняя строка функции устанавливает второй 'int' в динамически выделенном блоке на 13. –