C 語言中陣列和指標的關係

C 語言中陣列和指標一向都可以互相的轉換,在這裡,我要記一下比較特別的用法

通常宣告一個 2 維的陣列時,陣列的名字,本身就是一個 pointer to pointer 的指標,所以把陣列當作是指標在使用的時候,要解開指標時,也要解開 2 層的指標,另外,也可以把 2 維陣列的指標當作是 1 維陣列的指標來使用,這樣子的使用的話,要存取第 2 維的陣列元素時,就要自己計算 row 的大小才行了。

double x[2][3];
double* y;
*(*(x+1)+2) = 15;  //同於 x[1][2] = 15
y = (double*)x; 
//同於 x[1][2] = 15, 但是當作一維陣列的指標使用
*(y+1*3+2) = 15;

另外,宣告一個 struct ,其中有指標時,今天我也看到了一個比較少見的用法,通常我看到有指標,都是直接使用指標對記憶體進行操作。

struct test {
    int* data;
} *a;

a = (struct test*)malloc(sizeof(struct test));
a->data = (int*)malloc(10*sizeof(int));

a->data[0] = 10;

update:
2006.02.02: 修正第 2 段程式錯誤,a 變數應該是一個 pointer 才對

2 則回應給 C 語言中陣列和指標的關係

  1. jserv 說道:

    剛剛逛到這,打聲招呼。

    主要是因為 pointer 和 array 在語意層面 indirect / direct access 的差異,或許可以參考我之前的 blog:
    http://blog.linux.org.tw/~jserv/archives/001397.html
    http://blog.linux.org.tw/~jserv/archives/001423.html

    Thanks!

  2. GonDa 說道:

    謝謝,感謝提供意見~

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

你正使用 WordPress.com 帳號留言。 登出 / 變更 )

Twitter picture

你正使用 Twitter 帳號留言。 登出 / 變更 )

Facebook照片

你正使用 Facebook 帳號留言。 登出 / 變更 )

Google+ photo

你正使用 Google+ 帳號留言。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: