gpt4 book ai didi

c - 带有 int 指针的可变参数列表,未按预期工作

转载 作者:行者123 更新时间:2023-11-30 15:21:57 25 4
gpt4 key购买 nike

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;

}

所以基本上我想做的就是将函数指针传递给变量(在本例中是 ints),然后我想将这些指针分配给一个值(来自函数 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

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

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

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

**aa = b++;

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

关于c - 带有 int 指针的可变参数列表,未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29404273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com