【发布时间】:2024-01-17 00:46:01
【问题描述】:
我正在尝试在数组中打印一个值,但无法正常打印该值。尝试仅使用 C89 学习宏。代码如下:
#include<stdarg.h>
#include <stdio.h>
int getValues(int, ...);
int *myArr;
int getValues(int num_args, ...) {
int val[num_args];
va_list ap;
int i;
va_start(ap, num_args);
for(i = 0; i < num_args; i++) {
val[i] = va_arg(ap, int);
}
myArr = val;
va_end(ap);
return *val;
}
int main(void) {
getValues(1,2,3,4);
for(int i = 0; i < sizeof(myArr); ++i){
printf("%d\n", myArr[i]);
}
printf("Values are %d\n", myArr[0]); // Want this to print 1
return 0;
}
【问题讨论】:
-
cannot print the value as normal这不是一个很好的描述,任何人都无法理解哪里出了问题。myArr = val;见Can a local variable's memory be accessed outside its scope?。 -
对不起,我的意思是动态数组的值不能被访问,比如打印。在代码的注释中,我希望 print 语句打印 1。我不知道如何表达它。
-
val[]的作用域是封闭函数;仅仅因为您返回了数组的地址并不意味着内存对于您的指定目的仍然有效。 C 要求你适当地管理你的记忆。作为交换,您不需要处理标点符号移动。
-
我明白了。那么我应该如何访问这些值呢?这就是我想要达到的目的。例如,在访问包含这些值的数组的第一个元素时打印 1。我对 C 语言并不陌生,但我正试图深入挖掘其中一些我没有真正使用过的神秘部分。我已经关注了 va_list 的文档和示例,但我有点迷失了。