c語言 陣列與指標的異同

2021-10-01 10:32:50 字數 1114 閱讀 4253

指標

陣列儲存資料的位址

儲存資料

間接訪問資料,首先取得指標的內容,把它作為位址,然後從這個位址提取資料。

如果指標有乙個下標[i],就把指標的內容加上i作為位址,從中提取資料。

直接訪問資料,a[i]只是簡單的以a+i為位址取得資料。

通常用於動態資料結構

通常用於儲存固定數目且資料型別相同的元素。

相關的函式為malloc(),free()

隱式分配和刪除

通常指向匿名資料

自身即為資料名

陣列與指標不同的試驗:

ext.c

int a = ;
test.c

#include int main()

執行結果(32位編譯器下的執行結果)

&a = 0x601040

a = 0x601040

*a = 1

*a是代表a位址上儲存的第乙個元素的值

&a值和a一樣,但意義不同。

a表示陣列第乙個元素的位址,a+1就變成第二個元素位址(int 每個元素位址相隔4)

&a表示整個陣列,&a+1就直接跳過整個陣列的內回存位址空間(相當於跳過了 4*元素個數的位址)

下面我們將test.c修改為下面這樣

#include int main()

執行結果(32位編譯器下的執行結果)

&a = 0x601040

a = 0x1

segmentation fault (core dumped)

&a為指標a在記憶體中的位址值

a為指標對應記憶體位址上的值 0x1

*a為是取得0x1上儲存的值,0x1為記憶體是受到保護的記憶體,去這個上面取資料時,就會出現段錯誤。

為什麼會出現這種情況呢?其實在最開始的**中就進行了說明。

指標和陣列在訪問資料上存在區別。 

在上面的例子中,使用指標訪問extern int a的元素時,指標對應的內容實際上是陣列的值,然後指標使用陣列的值去相應位址上找資料,結果就出現了段錯誤。

指標與陣列的異同

在c語言中對於下面的兩種情況,是否相同呢?char a abcdefg 1 char p abcdefg 2 在談到這些區別時,應該先談一下計算機中對變數是如何儲存的。從編譯原理中我們知道,對於所有的變數他都會影射到乙個符號表中。為了簡化,這裡給出一種最簡單的便於理解的符號表 a 0xffaa p ...

陣列與指標的異同

我們定義乙個陣列和指標 int arry 0,4 7,8 int ptr ptr arry 或者ptr arry 0 首先我們要先了解一些概念 0.陣列實際上是指標的變相形式 1.指標的數值就是它指向的物件的位址 2.在指標前運用運算子 就可以得到該指標所指向物件的數值 如 ptr 0 ptr 1 ...

指標與陣列的異同

在c語言中對於下面的兩種情況,是否相同呢?char a abcdefg 1 char p abcdefg 2 在談到這些區別時,應該先談一下計算機中對變數是如何儲存的。從編譯原理中我們知道,對於所有的變數他都會影射到乙個符號表中。為了簡化,這裡給出一種最簡單的便於理解的符號表 a 0xffaa p ...