将指针作为参数传递给函数

问题描述 投票:0回答:1

我正在尝试了解指针在函数中的工作原理。

我知道指针可以用作函数参数,就像这样

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);

在这种情况下是否制作了指针的副本?此外,这将如何处理对象?指针指向的整个对象会被复制,还是只是指针被复制?

c pointers
1个回答
0
投票

这本质上是一项任务。 (不是字面意义上的)

当您将参数传递给函数时,您本质上(不是字面意义上的)从参数到函数形参进行赋值。

#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 等。指针并不是那么特别,它们只是保存值的变量。但该值不是整数或浮点数,而是内存地址。

© www.soinside.com 2019 - 2024. All rights reserved.