第13講:數組的定義和使用
- 一維數組的定義、內存形式(連續存儲)、初始化。
- 靜態數組與動態數組的初始值。
- 二維數組的定義、內存形式(按行連續存儲)、初始化。
- 多維數組的引用。
第14講: 數組與函數
- 數組元素作爲函數參數。
- 整個數組作爲函數參數,傳遞的是數組的首地址,所以實參和形參爲同一個對象。
- 數組作爲函數參數時,編譯器不檢查數組的長度,因此將數組的首地址傳入函數時,常需傳入另一個參數來表示實參數組的長度。但是多維數組除第一維外其餘維數的長度不可省略,否則無法確定數組的基類型。
第15講:字符串的處理
- 編譯器在編譯字符串常量時自動在其末尾加上結束符
'\0'
。
- 【字符串處理函數】
- 【字符串對象】:其類在
string
頭文件裏定義,字符串對象不需結束符\0
,且採用動態內存管理,還會檢查內存越界。
- 字符串對象可用字符串常量直接進行賦值而不需調用字符串處理函數。
- 字符串對象的操作:賦值運算、連接運算、關係運算。
第16講:數組的應用
- 用數組解決排序問題:交換排序、選擇排序。
- 用數組解決查找問題:順序查找、二分查找。
- 【二分查找實例】:
#include <iostream>
using namespace std;
int BinarySearch(int A[], int n, int find){
int low, upper, mid, result=-1;
low = 0, upper = n-1;
while(low<=upper){
mid = low +(upper-low)/2;
if(A[mid]<find)
low = mid+1;
else if(A[mid]>find)
upper = mid-1;
else
result = A[mid];
}
return result;
}
第17講:指針的定義與使用
- 數據的寫入與讀出均與內存打交道,而指針類型就是處理內存地址的數據類型。指針不僅能提高程序的效率,而且能使一個函數訪問另一個函數的局部變量,因此指針是函數進行數據交換必不可少的工具。
- 程序中的數據對象在生命週期內總是佔用一定的存儲空間,有確定的存儲位置。按對象名稱存取對象爲直接訪問,通過指針存取對象爲間接訪問。
- 由於指針的特殊性,指針的初始化和賦值是受一定約束的,只能是以下四種值:
int a, z=0;
int *p1=a;
p1 = z;
p1 = 4000;
p1 = null;
p1 = 0;
int a, *p1;
float b, *p2;
p1 = &a;
p1 = &bl;
p2 = &b;
- 基類型相同的指針變量的值
- 對象存儲空間的下一個有效地址
- 【指針的有效性】:指針指向有確定存儲空間的對象時爲有效指針,否則爲無效指針。
- 【無效指針】:0值指針(空指針);未初始化、未賦值或運算後指向未知對象的指針;指向對象被釋放後值卻未變的指針。
- 【指針運算】:指針作用在連續存儲空間上纔有意義,比如指針加減整數、同類型指針相減、指針間的關係運算。
- 【指針的限定】:
const int a=10, b=20;
const int *p;
p = &a;
p = &b;
*p = 12;
- 把
const
修飾過的對象的地址賦給基類型無const
修飾過的指針變量是錯誤的。
const double pi=3.14;
double *p=π
const double *ptr=π
- 允許把非
const
對象的地址賦給(指向const對象的?)const
指針,但不可通過const
指針改變其所指的非const
對象的值。const指針
常用於函數形參以保護限定實參爲只讀,此舉可增加程序健壯性。
const double pi=3.14;
const double *p=π
double f=3.14;
p = &f;
f = 3.14159;
*p = 3.141;