带有int指针的variadic参数列表,没有按预期工作

时间:2015-04-02 02:52:50

标签: c variadic-functions

char *指针上使用此技术对我有用。 (此处未显示,因为它没有错误)。但是,我将指针传递给指向test_variadic函数的指针。

使用gcc -Wall -Wextra -Werror -Wpadded -std=c99 test.c -o test 编译 我尝试用va_arg(args, int**)提取它,然后我将取消引用指针以为其赋值,我收到此错误:

test.c: In function ‘test_variadic’:
test.c:14:6: error: assignment makes pointer from integer without a cast [-Werror]
   *aa = b++;    
      ^
cc1: all warnings being treated as errors

#include <stdio.h>
#include <stddef.h>
#include <stdarg.h>

static int test_variadic(size_t length, ...)
{   
    int** aa;
    int b = 4;
    va_list args;
    va_start(args, length);

    for(size_t i = 0; i < length; i++) {
        aa = va_arg(args, int**);
        *aa = b++;              
    }

    va_end(args);

    return 0;
}

int main()
{
    int* a, *b;

    if(test_variadic(2, &a, &b) == 0) {
        printf("%d %d\n", *a, *b);
    }

    return 0;

}

所以基本上我要做的就是将函数指针传递给变量(在本例中为int s),然后我想将这些指针分配给一个值(来自函数{{ 1}}。我希望能够将指针传递给函数,然后为指针赋值。我希望能够分配一个不是指针的值,以便我可以访问它在主要。

1 个答案:

答案 0 :(得分:1)

该错误与可变参数列表无关;你正在使类型不匹配。您的代码是:

int **aa;   // a points to a pointer-to-int
int b;

// .... make 'a' point somewhere

*aa = b;   // error: (*aa) is a pointer-to-int, but you try to assign an int

根据您的帖子描述,您似乎想要*a指向找到4的地方。

天真地你可能会编写*aa = &b; ++b;然而这会失败,因为b在函数返回时被销毁。所以你必须分配内存:

*aa = malloc( sizeof **aa );
if ( ! *aa )
    return 1;

**aa = b++;

main函数应在打印值后执行free(a); free(b);