繁体   English   中英

指向指针作为函数参数的指针

[英]Pointer to pointer as a function parameter

我有以下代码:

#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',但未定义”。

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 的回答以了解正确使用指向指针的指针的说明。

你想修改一个int类型的变量,所以参数应该是int * ,而不是int **

如果您想修改int * variable 类型的变量,您将使用int ** 这不是这里的情况。

例如,

void f(int **pp) {
    *pp = malloc(10);
}

int main(void) {
    int *p;
    f(&p);
    // ...
    free(p);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM