2011-01-29 92 views
1

我需要分配一个N大小的数组并分配它的值,我怎么能没有int索引呢?如何循环在C中没有索引的数组?

这里是我的代码至今,但它不会做什么,我需要:

#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; 
} 

感谢

+1

我不确定我是否理解“没有int索引”?为什么在地球上你会受到这个限制?你“允许”使用指针算术吗? (即*(array + 1);?) – 2011-01-29 04:22:56

+0

这是一个家庭作业问题吗? – 2011-01-29 04:23:33

+0

指针算术将是要走的路。但这与索引完全相同(`*(arr + 2)`与`arr [2]`相同) – 2011-01-29 04:26:08

回答

2
  1. for(; *array; array++);你应该在最后删除;
  2. 重复这个循环的数量是不确定的,你将失去一个指针

你应该做这样的事情:

int *cur; 
for(cur = array; cur < array+n; ++cur) 
{ 
    *cur = ...; 
} 
1

如果你有那么一个数组int *a;

a[0] is equal to *a 
a[1] is equal to *(a+1) 
a[2] is equal to *(a+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指针。 您只能对由malloc返回的指针执行free

使用索引与操作指针相同,否则您的教授很荒谬。

1

当您分配内存时,您无法在内存中确定它结束的位置(除非您决定约定并在某处设置值,但无论如何,您都可以使用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++); 
    } 
相关问题