小豬的C語言快速入門系列(五)
小豬的C語言快速入門系列(五)
標籤: C語言
本節引言:
上一節我們C語言 複合資料型別
中的 陣列
進行了解讀,本節我們會繼續來學習
複合資料型別中的 指標
,指標可是C語言的靈魂;利用指標可以表示與使用複雜的
資料結構,讓我們可以更加方便的使用陣列與字串;可以像彙編一樣直接處理記憶體
單元地址;可以動態地進行記憶體空間分配;指標是C語言的重點,也是難點。
本節學習路線圖
指標概念,指標與一維陣列和字串
指標與二維陣列
這個知識點是指標裡的難點,要弄懂這裡的話,我們要先把重心放到二維陣列上,先
徹底瞭解清楚二維陣列!
Step 1:二維陣列是
按行與列儲存資料的
,可以看成 若干行 + 每行若干列的一維陣列組成;
比如:int a3 = {{1,2,3,4},{1,2,3,4},{1,2,3,4}}; 可以看成三行,每行有四個一維陣列;Step 2:a 代表二維陣列
首元素的地址
,即 &a[0],如果換成陣列的第二,三行的話,
只需要把 a + 1,a + 2這樣,等價於&a1,&a2Step 3:我們可以把 a[0] 看做是指向 a[0][0] 的指標,那麼 a[0]+1 即指向 a[0][1]
即此時地址為:&a[0][1]PS:這裡的+1的1是陣列元素所佔的位元組數,比如int a[]的話,那麼這個+1代表的就是往後
移動4個位元組,指向下一個元素;如果是+2的話就是後移8個位元組,所以a[i][2] = a[i] + 2Step 4:通過前面一維陣列的學習,知道了 a[i] 等價於 *(a+i),同樣的,擴充套件到
二維陣列的情況,則有a[i][j]
與*(a+i)+j
和a[i]+j
都是等價的,都是表示陣列元素
a[i][j] 的地址,而求a[i][j]的值
,用*(a[i]+j)
與*(*(a+i)+j)
都是可以的
注意一點:
*a
與 *(a+i)
都不代表任何具體的資料元素,所以當你引用他們的時候可能會引起錯誤!
如果上面的內容都捋清楚了,下面這幾個點一清二楚了:
- 1.陣列首地址
a[0]
: a 不可以直接引用!!! - 2.一維陣列a[0]首元的地址(
&a[0][0]
):a[0],*(a+0),*a
; - 3.第一行的首地址: a + 1 同樣不可以直接應用
- 4.一維陣列a1首元的地址
(&a[1][4])
:a[1]
,*(a + 1)
- 5.序號為2行4列元素
a[2][5]
的地址:a[2]+4
,*(a+2)+4
,a[2][6]
使用程式碼示例:
示例1:指向陣列元素
#include <stdio.h>
int main()
{
int a[2][2] = {{1,2},{3,4}};
int *p,i,j;
p = a[0];
//p = &a[0][0]或*a也可以
printf("輸出陣列中所有的元素:\n");
for(i = 0;i < 2; i++)
{
for(j = 0;j < 2;j++)
{
printf("%4d",*p);
p++;
}
printf("\n");
}
return 0;
}
輸出結果:
示例2:指向陣列
#include <stdio.h>
int main()
{
int i,j;
int a[4][9];
//定義一個行指標,並指向陣列的首地址
int (*p)[4];
p = &a[0];
printf("請輸入二維陣列中的陣列元素:\n");
for(i = 0;i < 4;i++)
{
for(j = 0;j < 4;j++)
{
scanf("%d",p[i]+j);
}
}
printf("輸出二維陣列中的資料:\n");
for(i = 0;i < 4;i++)
{
for(j = 0;j < 4;j++)
{
printf("%4d",*(p[i]+j));
}
printf("\n");
}
return 0;
}
輸出結果:
本文連結:小豬的C語言快速入門系列(五)
作者:Coder-Pig
出處:http://blog.csdn.net/coder_pig
本文基於知識共享署名-相同方式共享 4.0 國際許可協議釋出,歡迎轉載,
演繹或用於商業目的,但是必須保留本文的署名及連結。
相關文章
- C++語言菜鳥快速入門C++
- Flutter小白教程系列(三) --- Dart語言快速入門FlutterDart
- c語言入門C語言
- R語言快速入門R語言
- Go語言快速入門Go
- go語言快速入門教程Go
- C語言快速入門教程1快速入門 2指令 3條件選擇C語言
- GO 語言快速開發入門Go
- C語言入門基礎C語言
- Go語言入門系列(五)之指標和結構體的使用Go指標結構體
- 自然語言處理NLP快速入門自然語言處理
- golang 快速入門 [3]-go 語言 helloworldGolang
- Go語言程式設計快速入門Go程式設計
- Go語言快速入門筆記01Go筆記
- 《C 語言入門教程》釋出了
- yidajiabei 的演算法筆記系列—— C / C + + 快速入門演算法筆記
- Rust入門系列之語言特性 - 1Rust
- Go語言入門系列(四)之map的使用Go
- 【Go語言入門系列】(八)Go語言是不是面嚮物件語言?Go物件
- [C語言] 第一章|C語言入門第一課C語言
- golang 快速入門 [1]-go 語言導論Golang
- Dart語言——45分鐘快速入門(下)Dart
- Dart語言——45分鐘快速入門(上)Dart
- Golang語言檔案操作快速入門篇Golang
- C語言入門很簡單pdfC語言
- 入門輸出Hello World!——C語言C語言
- C語言五子棋小遊戲C語言遊戲
- C語言程式設計入門之--第五章C語言基本運算和表示式-part2C語言程式設計
- 【Go語言入門系列】(七)如何使用Go的方法?Go
- C語言入門經典(第5版)C語言
- C語言_入門例題_PAGE1C語言
- C#快速入門教程(12)—— if語句結構C#
- C語言實現小遊戲:五子棋C語言遊戲
- Android 音視訊入門:C語言基礎AndroidC語言
- 羽夏閒談—— C 語言入門之問
- C語言入門-mingw64安裝+配置C語言
- C語言判斷輸入小寫字母的個數C語言
- perl語言入門
- R語言的入門教程R語言