首先,我有点宿醉,所以我不确定如何提出这个问题。随意编辑标题或内容以提供更好的见解。
我有以下两种方法。它们都打印指针的地址。但是地址不同。在 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
的地址
我是一名优秀的程序员,十分优秀!