带有 int 指针的可变参数列表,未按预期工作
variadic argument list with an int pointer, not working as expected
在 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),然后我想将这些指针分配给一个值(来自函数 test_v*
。我希望能够将指针传递给函数,然后为指针分配一个值。我希望能够分配一个不是指针的值,以便我可以在 main 中访问它.
该错误与可变参数列表无关;你正在做一个类型不匹配。您的代码是:
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
根据您的 post 描述,您似乎想 *a
指向某个可以找到 4
的地方。
天真地你可能会写 *aa = &b; ++b;
但这会失败,因为 b
在函数 returns 时被销毁。所以你将不得不分配内存:
*aa = malloc( sizeof **aa );
if ( ! *aa )
return 1;
**aa = b++;
main
函数应该在打印值后执行 free(a); free(b);
。
在 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),然后我想将这些指针分配给一个值(来自函数 test_v*
。我希望能够将指针传递给函数,然后为指针分配一个值。我希望能够分配一个不是指针的值,以便我可以在 main 中访问它.
该错误与可变参数列表无关;你正在做一个类型不匹配。您的代码是:
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
根据您的 post 描述,您似乎想 *a
指向某个可以找到 4
的地方。
天真地你可能会写 *aa = &b; ++b;
但这会失败,因为 b
在函数 returns 时被销毁。所以你将不得不分配内存:
*aa = malloc( sizeof **aa );
if ( ! *aa )
return 1;
**aa = b++;
main
函数应该在打印值后执行 free(a); free(b);
。