程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++中一維數組與二維數組的手動調用

C++中一維數組與二維數組的手動調用

編輯:C++入門知識

在平時做項目的過程中或者C++學習的時候,開數組大家都會,但是對指針不熟練的人還是會對數組的原理表示不明,經常出現內存調用的BUG。 下邊講解一下人工開數組,眾所周知,在C++中,數組的本質是指針(老師們應該都是這麼教學的)。但是各位究竟對數組的指針操作了解多少? 一、數組的指針是const *T,不能直接修改地址. 下邊 [cpp]   int intArray[10];   intArray++;     是不對的。 但是有例外,那就是數組當做函數的形參的時候。 (1)數組名作為函數形參時,在函數體內,其失去了本身的內涵,僅僅只是一個指針; (2)很遺憾,在失去其內涵的同時,它還失去了其常量特性,可以作自增、自減等操作,可以被修改。 而我們這樣使用的話: [cpp]   double *x=new double [10];   x++;     是不會報錯的,指針會正常進行移位。手動開數組的話也可以用[]下標進行操作,也就是說,用new的話更加自由,當然出錯幾率更大。沒記錯的話 java好像就這樣聲明數組的。 [cpp]   #include <iostream>   using namespace std;      int a[10]={1,2,3,4,5,6,7,8,9,10};       int main()   {       int *c=new int[10];       c[0]=1;       c[1]=2;       c[2]=3;       cout<<c++<<endl;       cout<<*(c++)<<endl;   }   new來的空間是不會釋放的,最後應該delete操作釋放。 二維數組的話 [cpp]   int **x; //為什麼是兩個星號,因為在計算機中第一維中存的還是內存地址,內存地址指向另一個一維數組,二維數組本質上相當於兩個一維數組相乘。   x=new int * [10];//第一維本質是指針   for(int i=0;i<10;i++)   x[i]=new int [10];   //二維數組其實是這麼來的     釋放的話也要與之對應 [cpp]   for(int i=0;i<10;i++)       delete  []x[i];  //刪除行的指針   delete []x;   x=0;     如果手動開內存太多不釋放,內存不足的話,系統會開出bad_alloc異常,可以catch到。 今天大概就學到了這麼多。。最後說一個常識,sizeof()是運算符,絕對不是函數。    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved