指標
陣列儲存資料的位址
儲存資料
間接訪問資料,首先取得指標的內容,把它作為位址,然後從這個位址提取資料。
如果指標有乙個下標[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 ...