【发布时间】:2019-06-08 16:22:16
【问题描述】:
如果我在 main() 函数中声明一个数组并将该数组作为参数发送到一个函数中,我可以向该数组添加不是使用 malloc 创建的指针的元素吗?
我了解在函数中创建的静态变量会被放入堆栈,并在从函数返回后变得不可靠。但是,由于数组在main()中被初始化为静态数组,所以在从辅助函数返回后,数组中的内存位置应该被保留,不是吗?
typedef struct test_t {
int x,y;
} test;
void fillArray(test arr[], int length) {
int i;
for (i=0; i<length; i++) {
arr[i] = (test){i,i*3}
}
return;
}
void main() {
test arr[5];
fillArray(arr, 5);
int i;
for (i=0; i<5; i++) {
printf("(%d,%d)\n", arr[i].x, arr[i].y);
}
}
我希望这个玩具示例能够正常运行,因为没有发生太多事情,但这是技术上未定义的行为还是安全?
【问题讨论】:
-
你需要
#include <stdio.h>和void main()应该是int main(void)。除此之外(以及缺少的;)没关系。 -
这里没有静态数组。
-
@AnttiHaapala 我对静态数组和动态数组的理解是它们存储在内存中的位置。 dynamic = heap (malloc), static = stack(任何不涉及任何 alloc 函数的初始化)。我的理解缺陷在哪里?
-
port70.net/~nsz/c/c11/n1570.html#6.2.4 - 静态存储持续时间适用于具有非线程局部变量的外部、内部链接的文件范围标识符,以及具有
static关键字的其他范围内的所有变量。您的数组是main中的自动变量。
标签: c arrays pointers parameters