在C中将指针作为函数参数传递

时间:2014-05-01 16:42:50

标签: c function pointers

我试图在将它们作为参数传递给函数的上下文中理解C中指针的行为,所以我尝试搞乱并做出以下测试用例:

void function1(int argument)
{
     argument=4;
}

void function2(int* argument)
{
     *argument=5;
}

如果我运行以下语句:

int var1;
int* var2;
function1(var1);
function1(*var2);
function2(&var1);
function2(var2);

在哪些情况下,变量的变化会反映在调用函数中? 我尝试运行以下示例代码但无法理解输出

#include <stdio.h>
void funone(int arg)
{
    arg=5;
}
void funtwo(int* arg)
{
    *arg=6;
}
int main(void) {
    int var1=0;
    int *var2;
    var2=(int *)malloc(sizeof(int));
    *var2=0;
    funone(var1);
    printf("%d",var1);
    funone(*var2);
    printf("%d",*var2);
    funtwo(&var1);
    printf("%d",var1);
    funtwo(var2);
    printf("%d",*var2);
    return 0;
}

我得到的输出是

0066

这个输出有什么含义?

2 个答案:

答案 0 :(得分:0)

这两个示例都不起作用,因为您只是使用这些函数设置指针的值。您将在下面找到一个可以实现您想要的行为的版本:

void function2(int* argument)
{
    *argument=5;
}

argument参数之前的星号的原因是因为您正在取消引用指针的值(您正在访问它),因此您可以在此时更改其值......

我希望这会有所帮助......

答案 1 :(得分:0)

function1的代码更改了仅在函数中变量的值。因此,在功能之外没有任何改变的影响。

你的function2有效(即更改它指向的值),因为指针可以指向其范围之外的变量。但是你的第一个函数将值保留在它的范围内,一旦函数返回,任何更改都会丢失。

这个解释应该出现在关于指针的任何好的教程中。