西工大《C 程式設計》 (三)

2021-09-10 15:52:58 字數 3817 閱讀 7411

一維陣列的定義、記憶體形式(連續儲存)、初始化。

靜態陣列與動態陣列的初始值。

二維陣列的定義、記憶體形式(按行連續儲存)、初始化。

多維陣列的引用。

陣列元素作為函式引數。

整個陣列作為函式引數,傳遞的是陣列的首位址,所以實參和形參為同乙個物件。

陣列作為函式引數時,編譯器不檢查陣列的長度,因此將陣列的首位址傳入函式時,常需傳入另乙個引數來表示實參陣列的長度。但是多維陣列除第一維外其餘維數的長度不可省略,否則無法確定陣列的基型別。

編譯器在編譯字串常量時自動在其末尾加上結束符'\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...