淺議C語言中靈魂陣列和指標的互操作(轉)
淺議C語言中靈魂陣列和指標的互操作(轉)[@more@]曾聽好多朋友說,C是一種懷舊的語言,因為它的歷史很久遠,然而自從各種物件導向的程式語言的相續出現讓它的影響力日減。
當然了,這是無可非議的,但是C的高效性是其他語言無妨比擬的,所以我們有必要把握其中的精華與奧妙,也就有必要知道其中的基本的資料結構的比如陣列,稍微有點深度的堆疊、列表、結構體等的操作和實現。指標也是C語言中的一個很優秀靈活的結構,對它的瞭解也是必不可少的。
我們一般都認為陣列是一維的資料儲存結構,因為二位陣列或者說矩陣都可以看作是多個一維陣列的組合結構,定義在其上的資料儲存訪問方式是一樣的。所以一維陣列是其中最基礎的最重要的部分,只有理解了此類資料結構的本質才能觸類旁通了。
陣列(array)是若干同類變數的聚合,允許透過統一的名字飲用其中的變數。所以陣列也就是一個同一型別的資料的有限集合。可以透過下表來訪問陣列中的某一/些陣列元素。
在C語言中陣列都由連續的記憶體區域構成(有時候,不一定是這樣),最低地址對應首元素,陣列的下標是從0開始的,所以首元素也就是陣列下標為0的元素,最高的地址對應最末的元素,即第N-1個元素(如果我們定義的陣列為N元)。
陣列的定義方式:
在C語言中允許在宣告陣列的時候同時對其進行初始化,也可以把宣告和定義放在不同的位置,初始化的一般的類似於如下的表示式:
type_specifier array_name[size1]...[sizeN] = {value_list};
其中vlaue_list是由逗號(,)分隔的常量表,常量表必須和type_specifier相容。最後由分號與下一個語句分隔。由此可見一維陣列的定義方式為:
type_specifier
array_name[size] = {value_list};
如下:
char hello[12] = {’H’,’e’,’l’,’l’,’o’,’,’
,’ ’,’w’,’o’,’r’,’l’,’d’,’’};
注意:字元陣列是一"’’"收尾的,這是C標準的一部分。因為在操作字元陣列的時候是以’’作為結束判斷的標誌。當然了,如果你定義的是一個字串那就不用加這個’’了。因為有機制幫助你自動新增。
上面的例子的串的生命方式為:string hello = "Hello, world";(當然了,具體的實現中你必須把"string.h"標頭檔案加入到你的檔案中),或者你也可以這樣來宣告:
char *hello = "Hello, world";或者char hello[] = "Hello, world";
切換為字元指標陣列,其效果是一樣的);陣列初始化的時候還可 以不標明最大小,即
char hello[] = {’H’,’e’,’l’,’l’,’o’
,’,’,’ ’,’w’,’o’,’r’,’l’,’d’,’
’};,
這時候編譯器會根據後邊的賦值情況為陣列分配合適的記憶體空間,這個你不用擔憂,除非機器正處於記憶體缺狀態。
陣列元素的訪問:
可以利用迴圈結構來挨個訪問陣列的元素,比如:
[...]
int i;
char hello[12] = {’H’,’e’,’l’,’l’,’o’,’
,’,’ ’,’w’,’o’,’r’,’l’,’d’,’’};
[...]
for(i = 0; i < 12; i++){
printf("%c",hello);
}
printf(" ");
[...]
其中有一點必須注意了,那就是i的值不能取到12,因為我們的下標識從0開始的,即hello[0]是第一個元素,陣列的下界,而hello[12]是第一個空元素,陣列的上界。
其實,陣列元素的個數等於定義時的下標,也等於陣列的上界(12)減去下界(0)得到的數值,還等於上界地址減去下界地址模sizeof(tyep_specifier)的值(假設陣列空間是連續分佈的,如果不是這樣那麼這種方法也就不成立了)。
當然了,這是無可非議的,但是C的高效性是其他語言無妨比擬的,所以我們有必要把握其中的精華與奧妙,也就有必要知道其中的基本的資料結構的比如陣列,稍微有點深度的堆疊、列表、結構體等的操作和實現。指標也是C語言中的一個很優秀靈活的結構,對它的瞭解也是必不可少的。
我們一般都認為陣列是一維的資料儲存結構,因為二位陣列或者說矩陣都可以看作是多個一維陣列的組合結構,定義在其上的資料儲存訪問方式是一樣的。所以一維陣列是其中最基礎的最重要的部分,只有理解了此類資料結構的本質才能觸類旁通了。
陣列(array)是若干同類變數的聚合,允許透過統一的名字飲用其中的變數。所以陣列也就是一個同一型別的資料的有限集合。可以透過下表來訪問陣列中的某一/些陣列元素。
在C語言中陣列都由連續的記憶體區域構成(有時候,不一定是這樣),最低地址對應首元素,陣列的下標是從0開始的,所以首元素也就是陣列下標為0的元素,最高的地址對應最末的元素,即第N-1個元素(如果我們定義的陣列為N元)。
陣列的定義方式:
在C語言中允許在宣告陣列的時候同時對其進行初始化,也可以把宣告和定義放在不同的位置,初始化的一般的類似於如下的表示式:
type_specifier array_name[size1]...[sizeN] = {value_list};
其中vlaue_list是由逗號(,)分隔的常量表,常量表必須和type_specifier相容。最後由分號與下一個語句分隔。由此可見一維陣列的定義方式為:
type_specifier
array_name[size] = {value_list};
如下:
char hello[12] = {’H’,’e’,’l’,’l’,’o’,’,’
,’ ’,’w’,’o’,’r’,’l’,’d’,’’};
注意:字元陣列是一"’’"收尾的,這是C標準的一部分。因為在操作字元陣列的時候是以’’作為結束判斷的標誌。當然了,如果你定義的是一個字串那就不用加這個’’了。因為有機制幫助你自動新增。
上面的例子的串的生命方式為:string hello = "Hello, world";(當然了,具體的實現中你必須把"string.h"標頭檔案加入到你的檔案中),或者你也可以這樣來宣告:
char *hello = "Hello, world";或者char hello[] = "Hello, world";
切換為字元指標陣列,其效果是一樣的);陣列初始化的時候還可 以不標明最大小,即
char hello[] = {’H’,’e’,’l’,’l’,’o’
,’,’,’ ’,’w’,’o’,’r’,’l’,’d’,’
’};,
這時候編譯器會根據後邊的賦值情況為陣列分配合適的記憶體空間,這個你不用擔憂,除非機器正處於記憶體缺狀態。
陣列元素的訪問:
可以利用迴圈結構來挨個訪問陣列的元素,比如:
[...]
int i;
char hello[12] = {’H’,’e’,’l’,’l’,’o’,’
,’,’ ’,’w’,’o’,’r’,’l’,’d’,’’};
[...]
for(i = 0; i < 12; i++){
printf("%c",hello);
}
printf(" ");
[...]
其中有一點必須注意了,那就是i的值不能取到12,因為我們的下標識從0開始的,即hello[0]是第一個元素,陣列的下界,而hello[12]是第一個空元素,陣列的上界。
其實,陣列元素的個數等於定義時的下標,也等於陣列的上界(12)減去下界(0)得到的數值,還等於上界地址減去下界地址模sizeof(tyep_specifier)的值(假設陣列空間是連續分佈的,如果不是這樣那麼這種方法也就不成立了)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-957853/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C語言指標(三):陣列指標和字串指標C語言指標陣列字串
- C陣列和指標陣列指標
- C語言 指標與陣列C語言指標陣列
- C語言指標和陣列筆試題C語言指標陣列筆試
- c語言-運算子,陣列,指標C語言陣列指標
- 指標陣列和陣列指標與二維陣列指標陣列
- c語言中三維陣列C語言陣列
- C語言中“陣列名”和“&陣列名”C語言陣列
- (C語言)使用指標列印陣列的內容C語言指標陣列
- c語言中陣列的三種型別C語言陣列型別
- 陣列指標,指標陣列陣列指標
- C\C++語言重點——指標篇 | 為什麼指標被譽為 C 語言靈魂?(一文讓你完全搞懂指標)C++指標
- C指標和陣列的關係詳解指標陣列
- 【原創】淺談指標(十三)指向陣列的指標指標陣列
- Golang 學習——陣列指標和指標陣列的區別Golang陣列指標
- Go 陣列指標(指向陣列的指標)Go陣列指標
- 【C進階】28、指標和陣列分析指標陣列
- 【C】 28_指標和陣列分析(上)指標陣列
- 指標陣列與陣列指標指標陣列
- c語言中陣列的宣告與初始化C語言陣列
- c語言中計算陣列長度的方法C語言陣列
- C語言中陣列溢位是什麼C語言陣列
- 二維陣列和稀疏陣列互轉陣列
- 你正真瞭解C語言中的指標嗎C語言指標
- c語言中實現4行3列矩陣和3行4列矩陣的運算C語言矩陣
- C語言中陣列首地址和陣列第一個元素的地址有什麼區別C語言陣列
- 【原創】淺談指標(九)二維陣列和多級指標相關指標陣列
- C語言中的置0和置1操作C語言
- c語言中陣列的宣告喝初始化的區別和聯絡C語言陣列
- 認識 Go 語言中的陣列Go陣列
- c語言中二維陣列的生成及應用C語言陣列
- 陣列指標陣列指標
- c程式設計--指標與陣列C程式程式設計指標陣列
- C語言中的#和##C語言
- ARM彙編和C語言混合程式設計中陣列的陣列的操作C語言程式設計陣列
- 聊聊Go語言中的陣列與切片Go陣列
- 淺談C語言中函式的使用C語言函式
- C語言系列之 指標與陣列總複習視訊教程C語言指標陣列
- C語言使用指標對陣列指定位置進行插入元素C語言指標陣列