gpt4 book ai didi

c - 指针寻址并在函数内部创建新值

转载 作者:太空宇宙 更新时间:2023-11-04 01:06:48 25 4
gpt4 key购买 nike

首先,我有点宿醉,所以我不确定如何提出这个问题。随意编辑标题或内容以提供更好的见解。

我有以下两种方法。它们都打印指针的地址。但是地址不同。在 main 函数中打印指针地址时,结果与将指针地址传递给函数并打印的结果完全相同。但是当将指针传递给函数并打印地址时,您会得到一个不同的地址。这是为什么?

我了解到,当将变量传递给函数时,它会复制值并分配新内存。但为什么它不对指针地址执行此操作?

void print_pointer_1(int** p)   {
printf("In print_pointer_1 address is : \t\t\t%p\n", p);
}

void print_pointer_2(int* i) {
printf("In print_pointer_2 address is : \t\t\t%p\n", &i);
}

int main() {
int j = 1;
int* i = &j;

printf("Directly printing the pointers address in main : \t%p\n", &i);
print_pointer_1(&i);
print_pointer_2(i);

return 0;
}

产生这些输出:

Directly printing the pointers address in main :    0x7fff24330a48

In print_pointer_1 address is : 0x7fff24330a48

In print_pointer_2 address is : 0x7fff24330a28

最佳答案

void print_pointer_2(int* i)    {
^
Here is the local variable, you're
printing the address of this local variable.
printf("In print_pointer_2 address is : \t\t\t%p\n", &i);
}

所以你只是打印一个局部变量的地址。你宁愿打印指针的值,因为该指针存储您在 main() 中分配给它的地址

    printf("In print_pointer_2 address is : \t\t\t%p\n", i);

这自然会打印出 j 的地址,而不是 main 中的 i 变量的地址,因为您的 print_pointer_1() 函数可以。 print_pointer_2() 无法知道 main() 的 i

的地址

关于c - 指针寻址并在函数内部创建新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21357172/

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