C 學習札記20140318

2021-06-21 01:06:53 字數 2309 閱讀 1828

陣列的兩個特殊性質1不允許拷貝陣列,2使用陣列時會將其轉換成指標

我們可以把形參寫成類似陣列的形式

//儘管形式不同,但是這三個函式是等價的,,形參完全一樣 const int *

void print(const int *)

void print(const int )//函式的意圖是作用乙個陣列

void print(const int [10])//這裡的維度表示我們期望陣列含有多少個元素,實際不一定

管理陣列的方法

1 處理c風格字串,遇空字元時停止

void print(const char *cp)

} }

2 使用標準庫

void print(const int *beg, const int *end)

} 呼叫這個函式我們要傳入兩個指標,乙個指向首元素,乙個指向尾元素

int j = ;

print(begin(j), end(j));//begin和end函式返回兩個指著,分別指向首元素和尾元素的下乙個位置

3 顯式傳遞乙個表示陣列大小的形參

//const int ia 等價於 const int *ia

//size表示處理陣列的大小,將它顯式的傳給函式節控制對ia元素的訪問

void print(const int ia, size_t size)

} print(j,  end(j)-begin(j))

形參可以是陣列的引用,此時引用形參繫結到對應的實參上,也就是繫結到陣列上

void print( int (&arr)[10] )//&arr兩端的括號必不可少  int &arr[10]宣告成了引用的陣列,這是個陣列含

//有10個引用的元素,這是錯誤的

陣列第二維的大小都是陣列型別的一部分,不能省略!!

//matrix指向陣列的首元素,該陣列的元素是由10個整數構成的陣列

void print( int (*matrix)[10],   int rowsize)//matrix兩端括號必不可少

上述語句將matrix宣告成指向含有10個整數的陣列指標。

//等價定義

void print( int matrix[10],   int rowsize)//看起來像二維陣列,實際上形參是指向含有10個整數的陣列指標

函式的返回型別決定函式呼叫是否是左值

呼叫乙個返回引用的函式得到左值,其它返回型別得到右值

函式可以返回陣列的指標或引用,但是定義乙個返回陣列的指標或者引用的函式比較繁瑣,使用型別別名可以簡化這個任務

typedef int arry[10];//arry是乙個型別別名,它表示的型別是含有10個整數的陣列

using arry = int[10];//與上一句等價,不過是c++11的標準

arry  *func(int i);//func返回乙個指向含有10個整數的陣列指標

要想在宣告func時不使用型別別名,我們必須牢記被定義的名字後面陣列的維度

int arr[10];//arr是乙個含有10個整數的陣列

int *p1[10];//p1是乙個含有10個int型指標的陣列

int (*p2)[10];//p2是乙個指標,它指向含有10個整數的陣列

和這些宣告一樣,如果我們想定義乙個返回陣列指標的函式,則陣列的維度必須跟在函式名字之後,然而,函式的形參列表也跟在函式名字後面,且形參列表應該先於陣列的維度。返回陣列指標的函式形式如下:

type (*function(parameter_list)) [dimension]

具體的例子,下面這個func函式的宣告沒有使用型別別名:

int  (*func(int i)) [10];

逐層理解該宣告的含義

1 func(int i)表示呼叫func函式時需要乙個int型別的實參

2 (*func(int i))意味著我們可以對函式呼叫的結果執行解引用操作

3 (*func(int i)) [10]表示解引用func的呼叫將得到乙個大小是10的陣列

4  int  (*func(int i)) [10]表示陣列中的元素是int型別、

使用尾置返回型別,c++11新標準

在vs2010中選擇專案->屬性->配置屬性->除錯->命令列引數,輸入引數即可

#include #include int main(int argc, char *argv)

else

return 0;

}#include #include int main(int argc, char *argv)

return 0;

}

C 學習札記20140312

謹記,但凡使用了迭代器的迴圈體,都不要向迭代器所屬的容器新增元素!vector物件可以動態增長,但不能應用在範圍for的語句中對vector物件增加元素,還有任何改變vector物件容量的操作都會使得該物件的迭代器失效!不能解引用迭代器的end成員所指向的元素,因為end是指向迭代器的尾後,解引用就...

C 學習札記 2011 10 06

1 為了書寫方便,可將short int簡寫成short,即預設情況下short表示的意思是短整形,可類推long則表示長整型 2 單精度 float 32bit 雙精度 double 64bit 長精度 long double 80bit 統稱為浮點型 或實數型別 3 在c 中,整型常量可以用十進...

C 學習札記 2011 09 30

1 物件由屬性 attribute 和服務 service 兩部分組成 2 物件的屬性值只應由這個物件的服務來讀取和修改 3 具有相似屬性和行為的一組物件,成為類 class 4 在已有類的基礎上通過增加新的特性而派生出新的類,稱作繼承 原有類稱作一般類或基類,新建立的類則稱為特殊類或派生類 5 繼...