如何在不事先知道长度的情况下在C中创建数组?我能';t假设系统将使用任何特定标准

如何在不事先知道长度的情况下在C中创建数组?我能';t假设系统将使用任何特定标准,c,arrays,C,Arrays,我试过这样做: int z = 1; int *p = &z; *(++p) = 2; printf("%d",*p); 我假设*p=22和*(p-1)=1,但代码将编译,当我试图打印它时,它崩溃了。我将在运行时知道长度,这是用户输入 谢谢。您可以使用malloc和realloc为指针分配和重新分配内存,在运行时创建数组 请注意,未分配的反引用内存(即运行时数组“外部”的空间)是未定义的行为,可能会导致崩溃或其他问题。不要这样做。z是一个标量 int*p=&z是有效的++p也有效,因为

我试过这样做:

int z = 1;
int *p = &z;
*(++p) = 2;
printf("%d",*p);
我假设*p=22和*(p-1)=1,但代码将编译,当我试图打印它时,它崩溃了。我将在运行时知道长度,这是用户输入


谢谢。

您可以使用
malloc
realloc
为指针分配和重新分配内存,在运行时创建数组


请注意,未分配的反引用内存(即运行时数组“外部”的空间)是未定义的行为,可能会导致崩溃或其他问题。不要这样做。

z
是一个标量

int*p=&z是有效的
++p
也有效,因为您可以将一个指针指向标量的地址

但是取消引用该指针(使用
*(++p)
)的行为尚未定义


考虑使用可变长度数组(C99以后的版本,尽管即使是兼容C11标准的编译器也可以选择不实现可变长度数组)。如果不能做到这一点,请使用
malloc
,它至少自1978年以来一直是C标准的一部分。

查看
malloc
。这就是使用动态内存分配的原因。获取一本C教科书。决不能试图在堆栈框架之外乱用堆栈分配的内存,在C语言中,如果要声明和初始化函数中的变量,比如说
intz=1
该函数的内存是固定的,并在调用函数后直接分配。看看C语言中动态分配的内存。如果你不能假设任何超过ANSI C的合理标准,你至少应该阅读K&R的第二版《C编程语言》,这将介绍如何实现
malloc
函数,以便在运行时为指针分配内存onwards@CantfindnameC99是一个有17年历史的标准,甚至C11也已经有5年历史了。@mch但OP说“我不能假设系统将使用任何特定的标准”。OP可能需要使用一些蹩脚的Microsoft C编译器之类的东西。更不用说C11说“可变长度数组是一种实现不需要支持的条件特性”。