- 后臺開發:核心技術與應用實踐
- 徐曉鑫
- 1048字
- 2019-01-03 20:55:32
1.3 數組
1.數組的定義
數組是相同類型數據的集合。引入數組就不需要在程序中定義大量的變量,大大減少程序中變量的數量,使程序精煉,而且數組含義清楚,使用方便,明確地反映了數據間的聯系。許多好的算法都與數組有關。熟練地利用數組,可以大大地提高編程的效率,加強程序的可讀性。例1.5展示了數組的使用方法。
【例1.5】 一維數組與二維數組使用舉例。
#include<iostream> using namespace std; int main(){ int a[10]={1,2,3,4,5,6,7,8,9,10}; // 數組a,類型為int整型,有10個元素,是一個一維數組 int i,j; for(i=0;i<10;i++){ // 從a[0]~a[9] cout<<a[i]<<" "; } cout<<endl; int b[2][2]={1,2,3,4}; // 數組b,類型為int,有4 元素,是一個二維數組 for(i=0;i<2;i++){ for(j=0;j<2;j++){ cout<<b[i][j]<<" "; } cout<<endl; } return 0; }
程序的執行結果是:
1 2 3 4 5 6 7 8 9 1 2 3 4
例1.5中數組a是一個一維數組,有一個下標;數組b是一個二維數組,有兩個下標。
一個數組在內存中占用的存儲單元是連續的,也就是說一個數組在內存中占用一片連續的存儲單元。在32位的機器上,一個int類型的值占4Byte,如果a[0]的地址是2000,那么a[1]的地址就是2004,a[2]的地址就是2008,a[3]的地址就是2012……如此類推。這里的“地址”,大家可以簡單理解為在內存中的一個標識,詳細內容會在本章的1.4節中進行介紹。
2.字符數組
字符數組,就是一個用來存放字符數據的數組,示例如下:
char str[10]="Book";
其中,str就是一個字符數組,并且str[0]='B',str[1]='o',str[2]='o',str[3]='k'。C++中用'\0'來標識一個字符串的結束,這里,str[4]~str[9]都是'\0'。通常用strlen()函數來計算一個字符串的長度,故strlen(str)的值是4。與strlen()函數比較容易混淆的是sizeof()函數,這里sizeof(str)的值是10。
strlen與sizeof的區別如下所示:
(1)strlen()是函數,在運行時才能計算。參數必須是字符型指針(char*),且必須是以'\0'結尾的。當數組名作為參數傳入時,實際上數組已經退化為指針了。它的功能是返回字符串的長度。
(2)sizeof()是運算符,而不是一個函數,在編譯時就計算好了,用于計算數據空間的字節數。因此,sizeof不能用來返回動態分配的內存空間的大小。sizeof常用于返回類型和靜態分配的對象、結構或數組所占的空間,返回值跟對象、結構、數組所存儲的內容沒有關系。
當參數分別如下時,sizeof返回的值表示的含義如下所述。
1)數組——編譯時分配的數組空間大小,如:
char a[10]="hello";
因為char占1Byte,所以sizeof(a)的值是10*1=10Byte。
2)指針——存儲該指針所用的空間大小,如:
char *str="I am from China."
因為str存儲的是一個字符指針,所以sizeof(str)是指針所占的空間,即是4Byte。
3)類型——該類型所占的空間大小,如:
int b=10;
因為在32位的機器上,int類型占4Byte,所以sizeof(b)的值是4Byte。
4)對象——對象的實際占用空間大小,如:
class Class_Sample{ int a,b; int func(); }Class_a;
兩個int類型的值是8Byte,所以sizeof(Class_a)的值是8Byte。
5)函數——函數的返回類型所占的空間大小,且函數的返回類型不能是void。
- SQL Server 從入門到項目實踐(超值版)
- Windows Presentation Foundation Development Cookbook
- 機械工程師Python編程:入門、實戰與進階
- 微服務從小白到專家:Spring Cloud和Kubernetes實戰
- Learning AngularJS for .NET Developers
- Kivy Cookbook
- C++ Application Development with Code:Blocks
- SpringBoot從零開始學(視頻教學版)
- 貫通Tomcat開發
- Photoshop智能手機APP界面設計
- Appcelerator Titanium:Patterns and Best Practices
- Web編程基礎:HTML5、CSS3、JavaScript(第2版)
- Oracle SOA Suite 12c Administrator's Guide
- R語言編程基礎
- Mastering Java 11