亚洲精品一二区_国产黄色片网站_99久久久成人国产精品_蜜臀网_国产精品一区二区三区免费_成人av中文字幕_91精品国产欧美一区二区成人

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 指針數組與數組指針

指針數組與數組指針 時間:2018-09-29      來源:未知

了解了關于指針的基本內容后,針對于指針的高級內容,比如說指針數組和數組指針是經常容易混淆的兩個概念,下面我就跟大家簡單的介紹關于這兩個概念的理解與記憶。

要想了解指針數組和數組指針這兩個概念,那就得先來看一下指針和數組之間一些說不清的關系。

1. 指針與一維數組:直接上例子

舉例:打印數組的內容:

Int a[4] = {1,2,3,4}, i;

Int *p = a;

  For(I = 0; I < 4; i++)

{

Printf(“a[%d]=%d”, I, a[i]);

Printf(“a[%d]=%d”, I, *(p+i));//解釋:p指針指向了數組a,數組是連續的地址,在前面的內容中學到,p+i是指向地址大的方向移動i個數據,p+I ==&a[i]

Printf(“a[%d]=%d”, I, p[i]);

Printf(“a[%d]=%d”, I, *(a+i));

}

舉例:那打印數組的地址呢??

注意:從上面的例子可以看出:

數組的內容:a[i] == p[i] == *(p+i) == *(a+i)

數組的地址:&a[i] == &p[i] == p+I == a+i

在這里很多人可能會想指針與數組好像沒有多大的區別,數組可以用指針來代替,但實際上兩者之間存在一個本質的區別,那就是:數組名它是一個地址常量,指針是指針變量。

如: int a[3] = {1,2,3}, *p = a;

Printf(“%p\n”, p++);

Printf(“%p\n”, a++);//錯:a++ a=a+1,a是地址常量,常量是不能被賦值的

Printf(“%p\n”, a+1);//對:a+1并沒有進行賦值運算

2. 指針與二維數組:

對二維數組的理解:可以把二維數組看作由多個一維數組組成,如int a[2][3],可以理解成兩個一維數組:a[0](是一個一維數組名,包含三個元素a[0][0]\a[0][1]\a[0][2])和a[1](包含三個元素:a[1][0]\a[1][1]\a[1][2])

思考:

1. 數組int a[2][3],如何表達第二行第二列元素的地址?

&a[1][1]、&a[1][0]+1、a[1]+1、*(a+1)+1

2. 數組int a[2][3],如何表達第二行第二列元素的元素?

a[1][1]、*(&a[1][0]+1)、*(a[1]+1)、*(*(a+1)+1)

到目前為止只是二維數組的一個相應操作,那把二維數組和指針牽扯上關系后會怎么樣呢??接下來看我們的指針數組和數組指針。

注意:

數組的內容:a[i][j] == *(a[i]+j) == *(*(a+i)+j)

數組的地址:&a[i][j] == a[i]+j == *(a+i)+j

3. 指針數組:數組,指由若干個具有相同存儲類型和數據類型的指針變量構成的集合,數組的元素是指針的數組。

形式:<存儲類型>  <數據類型>  *<指針變量數組名>[<數組大小>];

int  *p[3];

舉例:

int a[2][3] = {{1,2,3},{4,5,6}};

int *p[2] = {a[0], a[1]}, i, j;

for(i = 0; i < 2; i++)

{

for(j = 0; j < 3; j++)

{

//printf("&a[%d][%d]=%p ", i, j, &a[i][j]);

//printf("&a[%d][%d]=%p ", i, j, a[i] +j);

//printf("&a[%d][%d]=%p ", i, j, *(a+i)+j);

//printf("&a[%d][%d]=%p ", i, j, &p[i][j]);

//printf("&a[%d][%d]=%p ", i, j, p[i]+j);

printf("&a[%d][%d]=%p ", i, j, *(p+i)+j);

}

}

putchar(10);

注意:

地址:&a[i][j] <==> a[i] + j <==> *(a+i) + j <==> *(p+i)+j <==> p[i] + j <==>&p[i][j]

內容:a[i][j] <==> *(a[i] + j) <==> *(*(a+i) + j) <==> *(*(p+i)+j) <==> *(p[i] + j) <==>p[i][j]

4. 數組指針:指針,指向數組的指針,指向特定位數數組的指針(指向一個有三個int 型元素數組的指針,指針加一,指針偏移12個字節)

形式:<存儲類型>  <數據類型>  *<指針變量數組名>[<數組大小>];

int  (*p)[3];

1) 指向一維的:

如:int a[4]  int [4]a  INT a

Int (*p)[4]  int [4](*p)  INT (*p)

所以等價關系為:p = &a

舉例:

Int a[4] = {1,2,3,4};

Int (*p)[4], i;

P = &a;

For(I = 0; I < 4;i++)

{

Printf(“%d\n”, (*p)[i]);

Printf(“%d\n”, *((*p)+i));

Printf(“%p\n”, (*p)+i);

}

注意:

地址:(*p)+i

內容:*((*p)+i)、(*p)[i]

2) 指向二維的:

如:int a[3][4]  int [4] a[3]  INT [4] a[3]

Int (*p)[4]  int [4] (*p)  INT [4] (*p)

所以等價關系為:p = a

舉例:

int a[3][4] = {11,22,33,44,55,66,77,88,99,100,110,120};

int (*p)[4] = a; 

int i = 0,j = 0;

for(i = 0;i < 3;i++)

{

for(j = 0;j < 4;j++)

{

//printf("%d ",p[i][j]);

//printf("%d ",*(p[i] + j));

printf("%d ",*(*(p + i) + j));

}

putchar(10);

}

以上便是我對于指針數組和數組指針的理解,希望能夠對讀者有所幫助!

上一篇:如何在C中動態分配二維數組

下一篇:linux線程私有數據

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 欧美高清视频在线 | 亚洲人jizz日本人 | 中日韩免费视频 | 国产美女久久久 | 国产精品人人做人人爽人人添 | 日本黄色小视频 | 亚洲日本视频 | 国产一级淫片a免费播放口 国产一级又色又爽又黄大片 | 97人人在线视频 | 亚洲精品亚洲人成在线 | jizz在线观看18 | 青青免费 | 亚洲国产精品综合久久久 | 国产精品福利一区二区久久 | 久热精品视频在线播放 | 国内精品福利丝袜视频_速 国内精品福利在线视频 | 欧洲一级做a爱在线观看 | 精品一区二区三区五区六区七区 | 免费黄视频软件 | 免费看一级淫片成人 | 色视频在线观看免费 | 狠狠久久综合 | 中文字幕啪啪 | 韩国三级hd中文字幕叫床 | a久久99精品久久久久久不 | 人人人插 | 九九热免费在线观看 | 国产日本亚洲欧美 | 日本精品视频 | 人人狠狠综合久久亚洲婷婷 | 日韩欧美精品在线视频 | 九九热国产精品视频 | 特黄特黄黄色大片 | 免费剧大全电视剧大全 | 久久国产精品网 | 理论片2019最新理论片免费视看 | 黄色片视频在线免费观看 | 午夜剧场操一操 | 国产精品视频久 | 在线观看黄网视频免费播放 | 欧美高清在线观看视频 |