gpt4 book ai didi

c - 双指针 vs 单指针

转载 作者:太空狗 更新时间:2023-10-29 14:50:00 27 4
gpt4 key购买 nike

有人可以解释/给我推理为什么下面代码片段中 main 函数中的变量 i 的值不会通过函数 test1 改变而它通过 test2 改变吗?我认为单个指针应该足以改变 i 的值。为什么我们应该使用双指针?

#include <stdio.h>

void test1(int* pp)
{
int myVar = 9999;
pp = &myVar;
}

void test2(int** pp)
{
int myVar = 9999;
*pp = &myVar;
}

int main()
{
printf("Hej\n");
int i=1234;
int* p1;

p1 = &i;

test1(p1);
printf("does not change..., p1=%d\n",*p1);

test2(&p1);
printf("changes..., p1=%d\n",*p1);
return 0;
}

最佳答案

在 C 中,参数是按值传递的。这意味着在 test1 中,当您传递 pp 时,指针会生成一个副本,而当您更改它时,更改会副本 而不是指针本身。使用 test2 副本是双指针,但是当您在此处取消引用和分配时

*pp = &myVar;

您正在更改所指向的内容,而不是更改 pp 本身。请注意,test2 中的此行为未定义,如此处的其他一些答案中所述

关于c - 双指针 vs 单指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13703029/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com