我有代码片段,我无法理解它是如何工作的,因为有一行可以进行双重解除引用。代码如下所示:
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?
答案 0 :(得分:3)
如果使用临时变量,代码很容易理解,例如:
void afunction(int**x)
{
int* t = *x;
t = malloc(2 * sizeof(int));
*t = 12;
*(t+1) = 13;
}
这样:
x
是指向int
*x
会产生int*
(指向int
)**x =
与*(*x) =
类似,因此您首先获取指向int
的指针,然后通过取消引用您可以在地址处设置值最后一部分*(*x+1) =
可以分解:
int* pointerToIntArray = *x;
int* secondElementInArray = pointerToIntArray + 1;
*secondElementInArray = 13;
在这里使用指针指针的目的是你可以将地址传递给函数的int*
,让函数分配内存并用数据填充它。返回int*
可以达到同样的目的,例如:
int* afunction() {
int* x = malloc(sizeof(int)*2);
*x = 12;
*(x+1) = 13;
return x;
}
int main() {
int* v = afunction();
return 0;
}