關於C語言中陣列和指標的互操作

2022-04-07 06:28:48 字數 1618 閱讀 5961

c是一種懷舊的語言,因為它的歷史很久遠,然而自從各種物件導向的程式語言的相續出現讓它的影響力日減。當然了,這是無可非議的,但是c的高效性是其他語言無妨比擬的,所以我們有必要把握其中的精華與奧妙,也就有必要知道其中的基本的資料結構的比如陣列,稍微有點深度的堆疊、列表、結構體等的操作和實現。指標也是c語言中的乙個很優秀靈活的結構,對它的了解也是必不可少的。  

我們一般都認為陣列是一維的資料儲存結構,因為二位陣列或者說矩陣都可以看作是多個一維陣列的組合結構,定義在其上的資料儲存訪問方式是一樣的。所以一維陣列是其中最基礎的最重要的部分,只有理解了此類資料結構的本質才能觸類旁通了。  

陣列(array)是若干同類變數的聚合,允許通過統一的名字飲用其中的變數。所以陣列也就是乙個同一型別的資料的有限集合。可以通過下表來訪問陣列中的某一/些陣列元素。在c語言中陣列都由連續的記憶體區域構成(有時候,不一定是這樣),最低位址對應首元素,陣列的下標是從0開始的,所以首元素也就是陣列下標為0的元素,最高的位址對應最末的元素,即第n-1個元素(如果我們定義的陣列為n元)。  

陣列的定義方式:  

在c語言中允許在宣告陣列的時候同時對其進行初始化,也可以把宣告和定義放在不同的位置,初始化的一般的類似於如下的表示式:  

type_specifier array_name[size1]...[sizen] = ;  

其中vlaue_list是由逗號(,)分隔的常量表,常量表必須和type_specifier相容。最後由分號與下乙個語句分隔。由此可見一維陣列的定義方式為:  

type_specifier array_name[size] = ;  

如下:char hello[12] = ;  

注意:字元陣列是一"』』"收尾的,這是c標準的一部分。因為在操作字元陣列的時候是以』』作為結束判斷的標誌。當然了,如果你定義的是乙個字串那就不用加這個』』了。因為有機制幫助你自動新增。上面的例子的串的生命方式為:string hello = "hello, world";(當然了,具體的實現中你必須把"string.h"標頭檔案加入到你的檔案中),或者你也可以這樣來宣告:  

char *hello = "hello, world";或者char hello = "hello, world"; 切換為字元指標陣列,其效果是一樣的);數槌跏薊的時候還?nbsp;以不標明最大小,即  

char hello = ;,這時候編譯器會根據後邊的賦值情況為陣列分配合適的記憶體空間,這個你不用擔憂,除非機器正處於記憶體缺狀態。

陣列元素的訪問:  

可以利用迴圈結構來挨個訪問陣列的元素,比如:  

[...]  

int i;  

char hello[12] = ;  

[...]  

for(i = 0; i 

printf("%c",hello[i]);  

}  printf(" ");  

[...]  

其中有一點必須注意了,那就是i的值不能取到12,因為我們的下標識從0開始的,即hello[0]是第乙個元素,陣列的下界,而hello[12]是第乙個空元素,陣列的上界。其實,陣列元素的個數等於定義時的下標,也等於陣列的上界(12)減去下界(0)得到的數值,還等於上界位址減去下界位址模sizeof(tyep_specifier)的值(假設陣列空間是連續分布的,如果不是這樣那麼這種方法也就不成立了)。

C語言中關於字元陣列和指標陣列

做筆試題目的時候,碰到字元陣列初始化的問題,居然一下子懵了。在c語言中儲存字串有兩種方法 字元陣列和字串指標 這兩者的儲存位置不同,首先字元陣列 區域性變數 是儲存在棧中的 指標指向字串時,則包括了兩部分,指標本身,儲存在棧中 區域性指標變數 字串本身儲存在 段 gcc中是這樣 基於上面一點就會產生...

C語言中陣列指標和指標陣列

如果看這兩個概念的英文翻譯可能會更容易理解 陣列指標 pointer to array 指標陣列 a array of pointer 顧名思義,陣列指標就是乙個指標變數,該變數指向乙個陣列。而指標陣列就是乙個陣列,這個陣列的元素都是指標,即每乙個元素都可以當成乙個指標變數使用。下面給出兩者的定義和...

C語言中的陣列 指標陣列 陣列指標

1 include 2 3 int main 4 執行結果 0xbfeefda9 0xbfeefdaa 0xbfeefdab12 70xbfeefda9 0xbfeefdaa 0xbfeefdab12 7以上執行結果可以得出如下結論 char str 3 1 str i strr i 2 str i...