我需要分配一个N大小的数组并为其赋值,如何在没有int索引的情况下完成它?
这是我到目前为止的代码,但它不能满足我的需求:
#include <stdlib.h>
#include <stdio.h>
int main() {
int *array;
int n;
printf("Size of array: ");
scanf("%d", &n);
array = (int*) malloc(n*sizeof(int));
if (array == NULL) printf("Memory Fail");
for(; *array; array++)
{
printf("Store:\n");
scanf("%d", &n);
*array = n;
}
for(; *array; array++)
{
printf("Print: %d\n",*array);
}
free(array);
return 0;
}
感谢
答案 0 :(得分:2)
for(; *array; array++);
您最后应删除;
你应该这样做:
int *cur;
for(cur = array; cur < array+n; ++cur)
{
*cur = ...;
}
答案 1 :(得分:1)
如果你有一个数组int *a;
,那么:
a[0] is equal to *a
a[1] is equal to *(a+1)
a[2] is equal to *(a+2)
所以你可以通过对指针进行算术来完成数组。
答案 2 :(得分:1)
您使用*array
作为条件,这意味着for
循环应该继续,除非*array
评估为false,这仅在*array == 0
时。您实际上正在调用未定义的行为,因为您使用array
分配malloc
并且在基础数据可能是任何内容时尝试取消引用指针,因为数据块未初始化。
你仍然需要某种类型的计数器来循环,在这种情况下你分配了n
个项目。
/* I'm using a C99 construct by declaring variables in the for initializer */
for (int i = 0; i < n; ++i)
{
/* In your original code you re-assign your counter 'n', don't do that otherwise you lost the size of your array! */
int temp;
printf("Store: \n");
scanf("%d", &temp)
array[i] = temp;
}
/* This is your second loop which prints the items */
for (int i = 0; i < n; ++i)
{
printf("%d\n", array[i]);
}
此外,不要在不保留副本的情况下操纵array
指针。 您只能对free
返回的指针执行malloc
。
使用索引与操纵指针相同,否则你的教授就是荒谬的。
答案 3 :(得分:1)
当您分配内存时,您无法在内存中确定它的结束位置(除非您决定约定并在某处设置值,但无论如何您将使用 n )。
在您的情况下,您必须使用 n 来限制阵列覆盖范围(否则它仅受您的计算机容量限制,直到它到达无法访问的区域:程序崩溃) 。例如(小心不要覆盖 n !)
int v;
int x = n;
int *ptr = array;
while (x--)
{
printf("Store:\n");
scanf("%d", &v);
*ptr++ = v;
}
x = n;
ptr = array;
while (x--)
{
printf("Print: %d\n",*ptr++);
}