一維陣列的定義、記憶體形式(連續儲存)、初始化。
靜態陣列與動態陣列的初始值。
二維陣列的定義、記憶體形式(按行連續儲存)、初始化。
多維陣列的引用。
陣列元素作為函式引數。
整個陣列作為函式引數,傳遞的是陣列的首位址,所以實參和形參為同乙個物件。
陣列作為函式引數時,編譯器不檢查陣列的長度,因此將陣列的首位址傳入函式時,常需傳入另乙個引數來表示實參陣列的長度。但是多維陣列除第一維外其餘維數的長度不可省略,否則無法確定陣列的基型別。
編譯器在編譯字串常量時自動在其末尾加上結束符'\0'
。
【字串處理函式】
【字串物件】:其類在string
標頭檔案裡定義,字串物件不需結束符\0
,且採用動態記憶體管理,還會檢查記憶體越界。
字串物件可用字串常量直接進行賦值而不需呼叫字串處理函式。
字串物件的操作:賦值運算、連線運算、關係運算。
用陣列解決排序問題:交換排序、選擇排序。
用陣列解決查詢問題:順序查詢、二分查詢。
【二分查詢例項】:
#include
using
namespace std;
intbinarysearch
(int a,
int n,
int find)
return result;
}
資料的寫入與讀出均與記憶體打交道,而指標型別就是處理記憶體位址的資料型別。指標不僅能提高程式的效率,而且能使乙個函式訪問另乙個函式的區域性變數,因此指標是函式進行資料交換必不可少的工具。
程式中的資料物件在生命週期內總是占用一定的儲存空間,有確定的儲存位置。按物件名稱訪問物件為直接訪問,通過指標訪問物件為間接訪問。
由於指標的特殊性,指標的初始化和賦值是受一定約束的,只能是以下四種值:
int a, z=0;
int*p1=a;
// 錯誤,位址初值不能為變數
p1 = z;
// 整型變數不能作為指標值,即使其值為0
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;
// 錯誤,*p是唯讀的
const
double pi=
3.14
;double
*p=π
// 錯誤,p非const指標
const
double
*ptr=
π// 正確,ptr為const型指標
const
double pi=
3.14
;const
double
*p=π
// 正確
double f=
3.14
;// f為非const物件
p =&f;
// 正確
f =3.14159
;// 正確
*p =
3.141
;// 錯誤,無法通過const指標解引用來修改所指物件的值
int a=
10, b=20;
int*
const p=
&a;// 只能初始化來賦值
p =&b;
// 錯誤,p是唯讀的
p = p;
// 錯誤,p是唯讀的
p++;
// 錯誤,p是唯讀的
*p =
2019
;// 正確
c++規定,陣列名既代表陣列本身,又代表整個陣列的位址,還是其首個元素的位址值。陣列名為常量。
指標的基型別應與其指向的物件的型別一致。
c++擴充了物件的訪問方式——引用訪問。
引用即乙個物件的別名,均為const
型別,其宣告形式為引用型別 &引用名稱=物件名稱
。
引用必須初始化,且不能引用有效記憶體物件;一旦初始化後不能改變引用關係;指定型別的引用不能初始化到其他型別的物件上;引用初始化與對引用的賦值含義完全不同。
int
&r;// 未初始化,錯誤
int x,
&ref=x, y;
// 正確
int&ref = y;
// 錯誤
//*******//
int x;
int&r=x;
// 初始化,r為x的引用
r =100
;//******//
int x,
&r=x;
int*p1=
&x;// p1指向x
int*p2=
&r;// p2指向r,本質上指向x
c++擴充引用型別主要是為了擴充函式形參的型別,由此函式引數傳遞增加為三種方式:傳遞物件本身,傳遞物件的指標,傳遞物件的引用(此方法比使用指標作為函式引數更加清晰、簡潔)。
#include
using
namespace std;
void
swap
(int
&a,int
&b)int
main()
函式返回引用即返回傳入的實體本身,因此函式返回的引用可以作為左值。
#include
using
namespace std;
// 函式返回指標,將其解引用後作為左值
int*
fun1
(int
*a,int
*b)// 函式返回引用,直接作為左值
int&
fun2
(int
&a,int
&b)int
main()
c++規定函式入口位址為函式的指標,即函式名既代表函式又代表函式的指標(位址)。【由此感悟到程式功能的本質是操作儲存器上由位址標識的資料】
#include
using
namespace std;
int*
fun1
(int
*a,int
*b)int
main()
函式指標常用於動態地呼叫返回值型別相同的不同函式,例如求定積分的函式。 西工大《C 程式設計》 (二)
程式對演算法的實現體現為一定數量的語句和執行流程。c 語句 分簡單語句 表示式語句 函式呼叫語句 空語句 復合語句 控制語句。輸入輸出 c 的輸入輸出都是用流物件實現的。cin輸入時可用空格 tab和回車分隔資料。那如何將這三者賦值給字元變數呢?單路分支 if.與多路分支 if.else.switc...
2019 西工大機試 C
2019年西工大的機試要求是 達到輸入一行,輸出一行即可 本人按照輸入多行,輸出多行進行編寫,較為複雜,僅供參考。1.一組整數,由小到大排序,有n組測試資料,排序輸出 輸入樣例 21 5863 2042 381563 201 output 01 2356 8123 481520 63 include...
2018 西工大機試 C
要求 達到輸入一行 輸出一行即可 1.求積 給定n組數,每組兩個整數,輸出這兩個整數的乘積.input 21 123 output 16 include using namespace std intmain return0 2.階乘 給定n組數,每組乙個整數,輸出該組數的階乘。input 23 5...