c語言 陣列與指標的那些事

2021-08-18 17:53:30 字數 1645 閱讀 8610

正文開始:由於是提高篇 ,所以不對簡單的指標和陣列解釋

#includeint main()

;//定義乙個一維陣列

int *p = a;//定義乙個指向int的指標 指向陣列a的首位址

printf("%p %p\n", a, a + 1);

printf("%p %p\n", p, p + 1);

printf("%d %d\n", p[0], a[0]);

return 0;

}

輸出結果是:

000000000062fe30 000000000062fe34

000000000062fe30 000000000062fe34

1 1從中我們可以看到其實陣列就是指標(這句話不絕對,如果大佬有正確的解釋 ,希望告知),可能有人看到了p[0]和a[0]是一樣的。這個先簡單這樣介紹一下

2:下面**更深一點,也算是比較經典的啦!

#includeint main()

; int b[3] = ;

int (*p)[3] = &a;//定義乙個陣列指標

printf("%p\n", a);//理解上可以把a 當成乙個指標 但是他不分配位址 那p就是乙個二級指標

printf("%p\n", &a[0]);

printf("%p\n", p);

printf("%d\n", **p); //相當於p是二級指標 *p == a == &a[0] **p = a[0]

printf("%d\n", **(p + 1));//輸出為0 說明 a 和 b 的位址不是相鄰的

return 0;

}

輸出結果是:

000000000062fe30

000000000062fe30

000000000062fe30

1上面定義了乙個陣列指標 意為指向乙個有三個int的陣列,這裡還會有乙個經常犯的錯誤,那就是把指標陣列和陣列指標搞糊塗,詳細的介紹可以參見這裡不做詳解,另外如果換成

int (*p)[3] = a;會出現warning 不信讀者可以試一試其中意味自己琢磨 因為我不能解釋的很好 ,也可以說不懂 哈哈哈
#includeint main()

輸出結果是:

000000000062fe44 000000000062fe38 000000000062fe44 0000000000000006

000000000062fe44 000000000062fe38 000000000062fe44 0000000000000006

從輸出可以看到指標p也是有位址的。

現在回到前面 我們理解上可以認為a就是指標,但是當你想輸出a的位址的時候也就是輸出p(&a)的 時候你會發現它和&a[0]是一樣的 ,所以你可以把它當作指標好了  由於自己的知識體系較淺 許多東西不能解釋透徹,如果有大佬知道希望能夠告知!感激不盡 !

第一次寫部落格  剛上大一 c語言也是剛學 ,但是熱愛程式設計,所以想寫下來這些東西留作以後回味 ,同時希望能夠幫助到一些人 ,同時激發大家的樂趣,這篇暫時介紹一維陣列和指標的聯絡 , 二維陣列的更複雜 ,日後研究完了再來寫!

指標陣列與陣列指標的那些事

我們先來看下指標陣列和陣列指標的定義 指標陣列 資料型別 陣列名 元素個數 如 int a 10 a表示乙個含有10個指向int型別的指標元素的陣列 陣列指標 資料型別 陣列名 元素個數 如 int a 5 a表示乙個指向含有5個int型別元素陣列的指標 本質區別 指標陣列 本質上是乙個陣列,只是陣...

C語言那些事之指標操作

乙個函式如果要返回乙個陣列,這個陣列最好不要定義成區域性變數,因為區域性變數傳過去後,該位址的內容有可能會發生變化,所以只能定義全域性變數陣列作為返回引數。定義的指標變數,該變數只能被呼叫或傳入位址,不能進行內容操作,否則會奔潰,在stm32中會跑入錯誤中斷中。貼乙個最近寫的字串操作的函式 c檔案 ...

指標的那些事

關於指標,大家都不陌生,無論學習c,c 亦或者其它程式語言,它都是不可或缺的。但是指標的定義 指標的用法 等等各種問題。我們都必須弄清楚,不能讓他阻礙我們前進的步伐 先說int p 這裡有必要說明一下 int 表示的定義乙個指向int 型別的指標變數 該變數記憶體裡是所指物件的位址,用 指標運算子 ...