2017-04-06 39 views
-3

以下Ç代碼的指針分配給數組:勘定INT *爲int []如預期中開發的C++不起作用

#include <stdio.h> 

// ders 5 : Diziler vs. Isaretciler 
int main(){ 
    int array[20]; 
    int i; 
    int* pointer = (int*)array; 
    // Fill the array with numbers from 0 to 20 
    for (i=1; i<=20; i++){ 
     array[i] = i; 
    } 

    printf("5th element of the array: %d \n", array[4]); 
    printf("array: %d pointer: %d \n",array,pointer); 
    printf("The value pointed with (pointer+4) %d \n", *(pointer+4));  
} 

即「指針」必須是等於「陣列「按價值計算,但事實並非如此。所以它會給出錯誤並崩潰。我使用BloodShed Dev C++ IDE(但程序是C語言)。

array and pointer values differ

+1

決定一個languge C或C++? –

+0

這段代碼完全用c寫成,源文件的擴展名也是c。是不是可以將int []分配給C中的int *? – fercis

+0

我不知道「dev-C++」是什麼;它是一個可以處理C++代碼以及C代碼的編譯器嗎?你是否必須告訴編譯器它是C代碼,還是會自動識別它? – Evert

回答

0

您不需要明確地將int* pointer = (int*)array;轉換爲int* pointer = array;本身返回的第一個元素的地址與該數組的基地址相同。

由於您聲明指針爲int,因此您可以遞增指針以訪問下一個數組值。

此外,在C中,索引從零開始,因此從 for (i=0; i<20; i++){開始的循環更好,這是應用程序崩潰的問題。由於C沒有邊界檢查,並會調用超出分配值的值,所以會引發分段錯誤。

-1

試試這個

#include <stdio.h> 


int main(){ 
    int array[21]; 
    int i; 
    int* pointer = array; 
    // Fill the array with numbers from 0 to 20 
    for (i=0; i<=20; i++){ 
     array[i] = i; 
    } 

    printf("5th element of the array: %d \n", array[4]); 
    printf("array: %d pointer: %d \n",*array,*pointer); 
    printf("The value pointed with (pointer+4) %d \n", *(pointer+4));  
} 
+2

'我<= 20'也會導致錯誤。 – ikh

+0

循環有問題。 –

+0

@Milind它工作正常。我不明白? – jophab

2
for (i=1; i<=20; i++){ 

C(和許多其他語言)上以零開始的索引。它shoule是如下:

for (i=0; i<20; i++){ 

關於概念:

數組是指針。它衰減到特定上下文中的指針,並且衰減值是該數組的第一個元素的地址。

相關問題