我有一段代码片段,我无法理解它是如何工作的,因为有一行执行了双重取消引用。代码如下所示:
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?
如果使用临时变量,代码就很容易理解,例如:
void afunction(int**x)
{
int* t = *x;
t = malloc(2 * sizeof(int));
*t = 12;
*(t+1) = 13;
}
so:
-
x
是一个指向指针的指针int
-
*x
产生一个int*
(指向int
)
-
**x =
就好像*(*x) =
所以你首先获得指向int
然后通过取消引用,您可以在地址处设置值
最后一部分*(*x+1) =
可以细分为:
int* pointerToIntArray = *x;
int* secondElementInArray = pointerToIntArray + 1;
*secondElementInArray = 13;
这里使用指向指针的指针的目的是可以将地址传递给int*
给函数并让函数分配内存并用数据填充它。可以通过返回一个来达到同样的目的int*
, eg:
int* afunction() {
int* x = malloc(sizeof(int)*2);
*x = 12;
*(x+1) = 13;
return x;
}
int main() {
int* v = afunction();
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)