我尝试过这样的事情:
int z = 1;
int *p = &z;
*(++p) = 2;
printf("%d",*p);
我会假设* p = 22和*(p-1)= 1但代码将编译,当我尝试打印时,它会崩溃。我将在运行时知道长度,它是用户输入。
谢谢。
答案 0 :(得分:2)
z
是一个标量。
int *p = &z;
有效。 ++p
也有效,因为您可以指定一个标量的地址。
但解除引用该指针(使用*(++p)
)的行为未定义。
考虑使用可变长度数组(C99以上,尽管即使符合C11标准的编译器也可以选择不实现可变长度数组)。如果做不到这一点,使用malloc
,至少从1978年开始就是C标准的一部分。
答案 1 :(得分:1)
您可以使用malloc
和realloc
为指针分配和重新分配内存,以便在运行时创建数组。
请注意,取消引用尚未分配的内存 - 即运行时阵列外部的空间 - 是未定义的行为,可能导致崩溃或其他问题。不要这样做。