指针作为函数参数的指针

时间:2019-12-28 14:47:11

标签: c pointers

我有以下代码:

#include <stdio.h>
#include <stdlib.h>

int f(int x, int *py, int **ppz) {
    int y, z;
    **ppz += 1;
    z = **ppz;
    *py += 2;
    y = *py;
    x += 3;
    return x + y + z;
}

int main(void) {
    int c = 4;

    printf("f(): %d\n", f(c, &c, &&c));
    printf("c:   %d\n", c);
    return EXIT_SUCCESS;
}

如何正确访问**ppz,因为这样我收到一条错误消息:“使用了标签'c',但未定义”。

2 个答案:

答案 0 :(得分:2)

int**是指向int*的指针。您需要创建int*类型的变量,以便能够将指针传递到某个地方。这是您应该做的:

int main(void) {
    int c = 4;
    int* pc = &c;

    printf("f(): %d\n", f(c, pc, &pc));
    printf("c:   %d\n", c);
    return EXIT_SUCCESS;
}

请参阅@ikegami的答案,以正确使用指向指针的指针。

答案 1 :(得分:1)

您要修改类型为dotnet watch run的变量,因此参数应为int,而不是int *

如果要修改int **类型的变量,请使用int **。这里不是这种情况。

例如,

int *