2011-01-29 91 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++); 
    } 
相關問題