如果我在main()函数中声明一个数组并将该数组作为参数发送到函数中,我可以向该数组中添加不是使用malloc创建的指针的元素吗?
我了解到,在函数中创建的静态变量被放到栈中,并且从函数返回后变得不可靠。但是,由于该数组被初始化为main()中的静态数组,因此从helper函数返回后应该保留该数组中的内存位置,不是吗?
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);
}
}
我希望这个玩具示例能够正常运行,因为没有发生太多事情,但这是技术上未定义的行为还是这样安全?
答案 0 :(得分:0)
在大多数情况下(*)数组都转换为指向其第一个元素的指针。
在您的情况下,当数组test arr[5]
用作函数参数时,将转换为指向类型为&arr[0]
的第一个元素(指向test*
)的指针。指向对象的内容是可变的,并且当控制权返回到main()
时,它们保留更改。
您的代码唯一的三件事是
#include <stdio.h>
void main()
应该是int main(void)
;
内for
的正文中缺少fillArray()
(*)例外是当数组用作sizeof
或&
运算符的参数时,或者当它是用于初始化数组对象的字符串文字时。 >