2014-09-06 139 views
-4

我認爲這種類型的問題已經被問到對不起,但任何人都可以告訴我爲什麼這是錯的。我不明白爲什麼我的代碼不工作?

int a[]={10,20,30,45,50}; 
    int j; 
    for(j=0;j<=4;j++) 
    { 
      cout<<(*a); 
      a++; 
    } 

好了,所以,如果在上面的代碼指針不能遞增那麼我下面的代碼工作,難道只是因爲指針首先分配給一個變量,然後其遞增。

int var[] = {10, 100, 200}; 
    int i, *ptr; 
    //let us have array address in pointer 
    ptr = var; 
    for (i = 0; i < MAX; i++) 
    { 
    printf("Value of var[%d] = %d\n", i, *ptr); 
    // move to the next location 
    ptr++; 
    } 
+0

你發現了什麼問題。 ..? – 2014-09-06 06:45:53

+0

錯誤是「左值需要作爲增量操作數」? – CodeHacker 2014-09-06 06:51:45

+0

你想要做什麼..? – 2014-09-06 06:53:17

回答

1

* a指的是[]的第一個元素,它是10.您將在++中得到編譯器錯誤。這是因爲你不能增加a的值。 * a是常數指針指向的第一個元件的[],並將其地址不能被改變..

它應該是:

int a[]={10,20,30,45,50}; 
int j; 
for(j=0;j<=4;j++) 
{ 
    cout<<*(a+j); 
} 
+0

但爲什麼一個錯誤只是遞增和解引用它呢? – CodeHacker 2014-09-06 06:58:52

+0

a是一個常數指針...它的地址無法更改.. – lakesh 2014-09-06 07:08:56

+0

如果我的回答很有用,請將它標記爲正確.. – lakesh 2014-09-06 18:49:11

1

它不編譯,因爲陣列不是指針:


隨着int arr[] = {...}

  • arr&arr的值不必相同

  • arr指向一個有效的存儲器地址,但不能被設置爲指向另一存儲器地址


隨着int* ptr = ...

  • ptr和的值不必相同(事實上,他們大多是不同的)

  • ptr可以設置爲指向有效和無效的內存地址,如多次,你會

相關問題