天天看點

C++基礎知識(三)

數組

數組的意義與性質

  • 數組的定義

    定義格式:元素類型 數組名稱[常數表達式]

    示例:int a[8]; // 定義包含8個整數元素的數組

  • 特别說明

    常數表達式必須是常數和常量,不允許為變量

    錯誤示例:int count = 8; int c[count];

    數組元素編号從0開始計數,元素通路格式為a[0]、a[1]、…

    不允許對數組進行整體指派操作,隻能使用循環逐一複制元素

    錯誤示例三:int a[8], b[8]; a=b;

  • 意義與性質

    将相同性質的資料元素組織成整體,構成單一次元上的資料序列

數組的位址

數組的基位址:數組開始存儲的實體位置

數組首元素的基位址:數組首個元素開始存儲的實體位址,數值上總是與數組基位址相同

“&”操作符:&a獲得數組的基位址;&a[0]獲得數組首元素的基位址

設數組基位址為p,并設每個元素的存儲空間為m,則第i個元素的基位址為p+mi

數組元素的初始化

  • 基本初始化格式

    定義格式:元素類型 數組名稱[元素個數] = {值1,值2,值3,…};

    示例:int a[8] = {1, 2, 3, 4, 5, 6,7,8};

    int a[8] = {,6,7,8};

  • 初始化時省略元素個數表達式

    在全部元素均初始化時可以不寫元素個數,使用sizeof操作符可以獲得元素個數

    示例二:int a[] = {1, 2, 3, 4, 5,6,7,8};

    int num_of_elements = sizeof(a)/sizeof(a[0]);

    sizeof(a)擷取資料存儲空間大小(以位元組為機關),sizeof(a[0])擷取數組首元素的存儲空間大小

數組與函數

  • 數組元素作為函數實際參數

    int Add(int x, int y){return (x+y);}

    int a[2]={1,2}, sum;

    sum = Add(a[0], a[1]);

  • 數組整體作為函數形式參數

    基本格式:傳回值類型 函數名稱(元素類型 數組名稱[], 元素個數類型 元素個數)

    示例:void GenerateIntegers(int a[], unsigned int n);

    特别聲明:作為函數形式參數時,數組名稱後的中括号内不需要寫元素個數,必須使用單獨的參數傳遞元素個數資訊。a[]數組既是輸入的一部分也是輸出的一部分(簡單了解為按位址傳遞)。

多元數組

  • 多元數組的定義

    定義格式:元素類型 數組名稱[常數表達式1][常數表達式2]…

    示例一:int a[2][2]; //2x2個整數元素的二維數組

    示例二:int b[2][3][4]; //2x3x4個整數元素數組

    特别說明:同單維數組

  • 多元數組的初始化

    與一維數組類似:int a[2][3] = {1, 2, 3, 4, 5, 6}

    單獨初始化每一維:int a[2][3] = {{1, 2, 3}, {4, 5, 6}}

結構體

  • 結構體的意義與性質

    與數組的最大差别:不同類型資料對象構成的集合,當然也可以為相同類型的但具體意義或解釋不同的資料對象集合

  • 結構體類型的定義:注意類型定義後面的分号

    struct 結構體名稱

    {

    成員類型1 成員名稱1;

    成員類型2 成員名稱2;

    成員類型n 成員名稱n;

    };

  • 結構體類型示例

    示例一:日期結構體

    struct DATE
    {
    	int year;
    	int month;
    	int day;
    };
               
  • 結構體類型的聲明

    僅僅引入結構體類型的名稱,而沒有給出具體定義,其具體定義在其他頭檔案中或本檔案後續位置

    struct COMPLEX;

  • 結構體資料對象的通路
  1. 結構體類型的變量與常量:按普量通格式定義

    示例一:DATE date;

    示例二:STUDENT zhang_san;

    示例三:STUDENT students[8];

  2. 結構體量的初始化

    示例四:DATE date={2008, 8, 8};

  3. 結構體量的指派

    與數組不同,結構體量可直接複制,拷貝過程為逐成員一一複制

    示例五:DATE new_date; new_date=date;

  4. 結構體量成員的通路

    使用點号操作符"."解析結構體量的某個特定成員

    示例一:DATE date;date.year=2008;date.month=8;date.day=9;

  5. 嵌套結構體成員的通路

    可以連續使用點号逐層解析

    示例二:

    struct FRIEND
    {
    	int id;
    	STRING name;
    	DATE birthday;
    };
    FRIEND friend;
    friend.birthday.year = 1988;
               
  6. 複雜結構體成員的通路

    嚴格按照文法規則進行

    示例三:

    FRIEND friends[4];
    friends[0].birthday.year=1988;
               
  7. 結構體與函數

    編寫一函數,使用結構體類型存儲日期,并傳回該日在該年的第幾天資訊,具體天數從1開始,例如2016年1月20日傳回20,2月1日傳回32

    unsigned int GetDateCount(Date date)
    {
    	static unsigned int days_of_months[13]=
    	{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    	unsigned int i, date_id = 0;
    	for(i=1, i<date.month;i++)
    	{
    		date_id += days_of_months[i];
    	}
    	date_id += date.day;
    	if(date.month > 2 && IsLeap(date.year))
    		date_id++;
    	return date_id;
    }
               

繼續閱讀