日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第五章 数组和指针的关系

發布時間:2023/12/13 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第五章 数组和指针的关系 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如果對聲明數組的語句不太明白的話,請參閱我前段時間貼出的文章<<如何
理解c和c++的復雜類型聲明>>。
????數組的數組名其實可以看作一個指針??聪吕?#xff1a;
例八:
?????????int?array[10]={0,1,2,3,4,5,6,7,8,9},value;
???????????...
???????????...
?????????value=array[0];//也可寫成:value=*array;
?????????value=array[3];//也可寫成:value=*(array+3);
?????????value=array[4];//也可寫成:value=*(array+4);
????上例中,一般而言數組名array代表數組本身,類型是int?[10],但如果把a
rray看做指針的話,它指向數組的第0個單元,類型是int?*,所指向的類型是數
組單元的類型即int。因此*array等于0就一點也不奇怪了。同理,array+3是一個
指向數組第3個單元的指針,所以*(array+3)等于3。其它依此類推。

例九:
?????????char?*str[3]={
????????????????????????"Hello,this?is?a?sample!",
????????????????????????"Hi,good?morning.",
????????????????????????"Hello?world"
??????????????????????};
?????????char?s[80];
?????????strcpy(s,str[0]);//也可寫成strcpy(s,*str);
?????????strcpy(s,str[1]);//也可寫成strcpy(s,*(str+1));
?????????strcpy(s,str[2]);//也可寫成strcpy(s,*(str+2));
????上例中,str是一個三單元的數組,該數組的每個單元都是一個指針,這些指
針各指向一個字符串。把指針數組名str當作一個指針的話,它指向數組的第0號
單元,它的類型是char**,它指向的類型是char?*。
????*str也是一個指針,它的類型是char*,它所指向的類型是char,它指向的地
址是字符串"Hello,this?is?a?sample!"的第一個字符的地址,即'H'的地址。
????str+1也是一個指針,它指向數組的第1號單元,它的類型是char**,它指向
的類型是char?*。
????*(str+1)也是一個指針,它的類型是char*,它所指向的類型是char,它指向
"Hi,good?morning."的第一個字符'H',等等。

????下面總結一下數組的數組名的問題。聲明了一個數組TYPE?array[n],則數組
名稱array就有了兩重含義:第一,它代表整個數組,它的類型是TYPE?[n];第二
,它是一個指針,該指針的類型是TYPE*,該指針指向的類型是TYPE,也就是數組
單元的類型,該指針指向的內存區就是數組第0號單元,該指針自己占有單獨的內
存區,注意它和數組第0號單元占據的內存區是不同的。該指針的值是不能修改的
,即類似array++的表達式是錯誤的。
????在不同的表達式中數組名array可以扮演不同的角色。
????在表達式sizeof(array)中,數組名array代表數組本身,故這時sizeof函數
測出的是整個數組的大小。
????在表達式*array中,array扮演的是指針,因此這個表達式的結果就是數組第
0號單元的值。sizeof(*array)測出的是數組單元的大小。
????表達式array+n(其中n=0,1,2,....。)中,array扮演的是指針,故arr
ay+n的結果是一個指針,它的類型是TYPE*,它指向的類型是TYPE,它指向數組第
n號單元。故sizeof(array+n)測出的是指針類型的大小。
例十:
?????????int?array[10];
?????????int?(*ptr)[10];
?????????ptr=&array;
????上例中ptr是一個指針,它的類型是int?(*)[10],他指向的類型是int?[10]
,我們用整個數組的首地址來初始化它。在語句ptr=&array中,array代表數組本
身。

????本節中提到了函數sizeof(),那么我來問一問,sizeof(指針名稱)測出的究
竟是指針自身類型的大小呢還是指針所指向的類型的大小?答案是前者。例如:

??????????int?(*ptr)[10];
????則在32位程序中,有:
??????????sizeof(int(*)[10])==4
??????????sizeof(int?[10])==40
??????????sizeof(ptr)==4
????實際上,sizeof(對象)測出的都是對象自身的類型的大小,而不是別的什么
類型的大小。

轉載于:https://www.cnblogs.com/jhjh/archive/2011/06/12/2079219.html

總結

以上是生活随笔為你收集整理的第五章 数组和指针的关系的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。