陣列的兩個特殊性質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 繼...