我正在尝试了解指针在函数中的工作原理。
我知道指针可以用作函数参数,就像这样
int *max(int* a, int* b){
if (*a > *b)
return a;
else
return b;
}
int *p, i, j;
p = max(&i, &j);
现在我对此的理解是我有一个返回int指针的函数,它的参数是2个int指针。调用该函数时,会向其提供 2 个 int 类型的地址 i 和 j,参数中的指针分别分配给这两个 int 类型。最后返回的是large int。它是否正确?对我来说,这是有道理的。
我对将指针传递给函数时发生的情况感到困惑。
所以,类似
int *p, i, j;
int *k = &i
p = max(k, &j);
在这种情况下是否制作了指针的副本?此外,这将如何处理对象?指针指向的整个对象会被复制,还是只是指针被复制?
这本质上是一项任务。 (不是字面意义上的)
当您将参数传递给函数时,您本质上(不是字面意义上的)从参数到函数形参进行赋值。
#include <stdio.h>
int foo(int *param)
{
return *param + 1;
}
int main(void)
{
int var = 0;
int *pointer = &var;
printf("This will print 1: %d\n", foo(&var));
printf("This will also print 1: %d\n", foo(pointer));
}
当您进行第一次调用时,它的工作原理就好像您正在进行赋值
param = &var
一样,这完全没问题,因为您正在使函数 param
中的变量 foo
接收 var
的地址。
当您进行第二次调用时,它的工作原理就像您正在进行赋值
param = pointer
一样,这也完全没问题,因为您正在使函数 param
中的变量 foo
接收 pointer
的值,这也是var
的地址。
查看指针的最佳方式是将它们视为变量,如
int
s、char
s 等。指针并不是那么特别,它们只是保存值的变量。但该值不是整数或浮点数,而是内存地址。