C:在数组中存储对堆栈变量的引用

C:在数组中存储对堆栈变量的引用,c,reference,stack,C,Reference,Stack,我正在编写一个在嵌入式MCU上运行的程序,所以我所有的内存分配都分配到堆栈(没有malloc()。我在函数中创建了一个结构并返回给调用方,我试图在返回之前在数组中保留对该变量的引用 问题是数组中存储的变量似乎是返回给调用方的变量的副本,因此它们不同步。下面的代码说明了该问题: #include <stdio.h> int *ARRAY_OF_VARIABLES[1]; int initalizeVariables() { int i = 0; ARRAY_OF_VA

我正在编写一个在嵌入式MCU上运行的程序,所以我所有的内存分配都分配到堆栈(没有malloc()。我在函数中创建了一个结构并返回给调用方,我试图在返回之前在数组中保留对该变量的引用

问题是数组中存储的变量似乎是返回给调用方的变量的副本,因此它们不同步。下面的代码说明了该问题:

#include <stdio.h>
int *ARRAY_OF_VARIABLES[1];

int initalizeVariables() {
    int i = 0;
    ARRAY_OF_VARIABLES[0] = &i;
    return i;
}

int main(void)
{
    int test = initalizeVariables();
    test = 1;
    printf ("Test: %d, ARRAY_OF_VARIABLES[0]: %d\r\n", test, (int)*ARRAY_OF_VARIABLES[0]);
}
#包括
int*变量数组[1];
int initializevariables(){
int i=0;
_变量的数组[0]=&i;
返回i;
}
内部主(空)
{
int test=initializevariables();
测试=1;
printf(“测试:%d,变量数组[0]:%d\r\n”,测试,(int)*变量数组[0]);
}
这将打印:Test:1,变量[0]的数组[0]:0


在没有malloc()和指针的情况下,如何保持“test”和“ARRAY\u OF_VARIABLES[0]”的同步?

我通过创建一个函数来解决这个问题,我可以将
I
的指针传递回
以存储在
ARRAY\u OF_OF
中。以下是新代码:

#include <stdio.h>
int *ARRAY_OF_VARIABLES[1];

int initalizeVariables() {
    int i = 0;
    return i;
}

void setInArray(int *i, int idx) {
    ARRAY_OF_VARIABLES[idx] = i;
}

int main(void)
{
    int test = initalizeVariables();
    setInArray(&test, 0);
    test = 123;
    printf ("Test: %d, ARRAY_OF_VARIABLES[0]: %d\r\n", test, *ARRAY_OF_VARIABLES[0]);
}
#包括
int*变量数组[1];
int initializevariables(){
int i=0;
返回i;
}
void setInArray(int*i,int idx){
_变量的数组_[idx]=i;
}
内部主(空)
{
int test=initializevariables();
setInArray(&test,0);
试验=123;
printf(“测试:%d,变量数组[0]:%d\r\n”,测试,*u变量数组[0]);
}

如果有更好的方法,请随时发布:)。

你做不到。当函数返回时,其局部变量将全部销毁。指向它们的指针无效。如果没有
malloc()
则使用全局变量,而不是局部变量。也可以使用
static int i=0
和另一个选项是在
main
(或任何需要的作用域级别)中创建变量,并将指向这些变量的指针传递到
initialize
函数中,以便
initialize
可以修改值。另外,为了澄清,
test
会收到一份本地变量
i
的副本,而变量[0]
的数组\u包含一个指向原始变量的指针(但现在已超出范围和垃圾)。您根本没有将指针传递给i!您正在向test传递一个指针,它是与i不同的变量。initializeVariables函数不执行任何操作,您可以将其替换为返回0;你能举一个更好的例子说明你想做什么吗?如果只有静态分配,为什么要使用指针?为什么不直接使用全局变量呢?