通过指针传递函数参数

时间:2013-08-14 10:42:49

标签: c++ c

当函数参数属于同一类型时,遵循定义良好且可移植的代码吗?

void foo(int* p, int size);
void pass_on_args_by_pointer(int a, int b, int c)
{
    foo(&a, 3);
}

要清除:'尺寸'参数应包含数组p中的元素数。所以,我想将所有三个整数传递给foo。

3 个答案:

答案 0 :(得分:7)

不,这既不便携也不明确。编译器不需要在内存中的相邻位置分配函数参数。事实上,他们不需要将参数bc放在内存中,因为您没有使用他们的地址。超出intpfoo范围内的任何访问都是未定义的行为。

答案 1 :(得分:0)

void foo(int** p, int size)
{
   **p = size;
    return;
}
void pass_on_args_by_pointer(int *a, int b, int c)
{
   foo(&a, 3);
}

int main(void)
{
    int a = 0;
    pass_on_args_by_pointer(&a, 0, 0);
    printf("a = %d", a);

}

如果要为变量a分配一些值,则需要使用指针指针。

答案 2 :(得分:-1)

即使它可能会工作(理论上,它应该,因为堆栈可以表示为数组),您的编译器没有义务在堆栈上传递参数。例如,它可以使用寄存器来优化代码,然后代码就会中断。

因此尝试以这种方式访问​​另一个函数的参数将是未定义的行为。