error C2105: ‘++’ needs l-value 數組名自增時遇到

來源:互聯網
上載者:User

 如下, k 是變數, 它存得是地址, 變數可以作為左值,可以自增。

              b是數組名,  數組名是地址, 但此時是作為常量,不可作為左值,不可以自增;
數組名是地址 它不是變數 數組才是變數

 

int b[]={10,20,30,40,50};
 int i, *k;
 k=&b[4]-4;
 for (i=0; i<=4; i++)
 {
  cout << *k << " "; //依次輸出每一個數組元素
  k++; //k 是變數, 它存得是地址, 變數可以作為左值,可以自增。
 }
 cout<<endl;

 cout<<"b = "<<b+1<<endl; //輸出的是第一個元素地址
 cout<<"&b[0] = "<<&b[0] + 1<<endl;
 cout<<"b = "<<b++<<endl; //數組名表示得是地址 不能做為左值 , b++ 表示的是b=b+1
 cout<<"&b[0] = "<<&b[0]++<<endl; //
&優先順序高於++, 同(&b[0])++, 也是地址自增,但此時地址是常量,而不是變數,同上,編譯出錯

 

比如說 int a[5],b[3]={1,2}; 你只會 a[1]=b[1]; 這樣 。 應該不會a=b把。

 

數組名不是變數 不能做左值

指標你可以把它看做一個整型(但不是)資料類型 它是一個變數 儲存得是一個地址 比如你可以把一個地址賦值給它,這時指標變數就儲存這個地址,再把另一個地址賦值給它, 這時指標變數就存另一個地址,它是可以變的,所以可以作為左值。

數組,你聲明一個數組,系統就分配了一個記憶體單元 這時數組名表示得是這個數組首元素得地址,這個地址是不能變得,可以把它看做(但不是)常量,所以不能作為左值 。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.