我有代码片段,我无法理解它是如何工作的,因为有一行进行了双重取消引用。代码如下所示:
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;
}
Run Code Online (Sandbox Code Playgroud)
我知道指向指针的指针的第一个元素的值是 12,但之后的行我似乎无法理解。第一个指针中的第二个元素的值是否为 13?
如果您使用临时变量,代码很容易理解,例如:
void afunction(int**x)
{
int* t = *x;
t = malloc(2 * sizeof(int));
*t = 12;
*(t+1) = 13;
}
Run Code Online (Sandbox Code Playgroud)
所以:
x 是一个指向一个指针的指针 int*x产生一个int*(指向int)**x =就像*(*x) =这样你首先获得指针int然后通过取消引用你可以在地址处设置值最后一部分*(*x+1) =可以分解:
int* pointerToIntArray = *x;
int* secondElementInArray = pointerToIntArray + 1;
*secondElementInArray = 13;
Run Code Online (Sandbox Code Playgroud)
这里使用指向指针的指针的目的是可以将地址传递int*给函数,让函数分配内存并填充数据。可以通过返回一个 来达到同样的目的int*,例如:
int* afunction() {
int* x = malloc(sizeof(int)*2);
*x = 12;
*(x+1) = 13;
return x;
}
int main() {
int* v = afunction();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25266 次 |
| 最近记录: |