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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

关于sizeof表达式作为数组元素个数的编译

發(fā)布時(shí)間:2025/4/16 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于sizeof表达式作为数组元素个数的编译 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

想總結(jié)這方面的內(nèi)容,是出于周一參加某公司的筆試題,有一道題是說(shuō)定義一個(gè)整型數(shù)組,里面數(shù)組元素的個(gè)數(shù)是用sizeof(unsigned long)表示,這樣是否合法?當(dāng)時(shí)寫的答案是不合法,因?yàn)槠綍r(shí)寫涉及到申請(qǐng)、定義數(shù)組的時(shí)候,如果數(shù)組大小是一個(gè)變量,C++會(huì)給報(bào)錯(cuò)。而在幾天之后我在CB上運(yùn)行之后,發(fā)現(xiàn)并沒(méi)有錯(cuò)。就查了一下sizeof的用法,看到MSDN上的關(guān)于sizeof和常量的解釋,說(shuō)的是sizeof之后得出來(lái)的是常量,這應(yīng)該就是解釋了為什么可以用sizeof()來(lái)定義一個(gè)數(shù)組的大小了吧。(后面接著有更合理的解釋)

接著看《C陷阱與缺陷》第三章中的指針與數(shù)組,之前也有看到別人總結(jié)的“指針數(shù)組與數(shù)組指針”,便試著自己來(lái)把所看到的知識(shí)總結(jié)下。

1.C語(yǔ)言中只有一維數(shù)組,且數(shù)組大小必須在編譯期作為一個(gè)常數(shù)確定下來(lái)。

關(guān)于這一點(diǎn),查了“sizeof 編譯期”,出來(lái)結(jié)果中找到了需要的內(nèi)容,是一本名叫《Let's C!!!》的書,“sizeof不是函數(shù),默認(rèn)是一個(gè)編譯期的運(yùn)算符,表達(dá)式在編譯期就能得出”(后面還說(shuō)明了為什么sizeof(指針)在32位系統(tǒng)上得出的結(jié)果都是4字節(jié),因?yàn)橹羔樀闹凳强勺兊?#xff0c;在運(yùn)行期可以修改,因此在編譯期不能確定指針指向空間的大小)。

還有一個(gè)很棒的結(jié)果,《C++元編程》 第二節(jié)編譯期判斷繼承關(guān)系?第3點(diǎn),C++編譯期三大神器(模板偏特化、函數(shù)重載、sizeof)著重看了sizeof的用法,在編譯期直接對(duì)它求長(zhǎng)的表達(dá)式做類型推導(dǎo),即只是計(jì)算類型的字節(jié)把它寫入編譯出來(lái)的代碼中,而不管里面的內(nèi)容是什么。博主舉了個(gè)例子如下:

#include <iostream>using namespace std;int main(){int i = 0;cout << sizeof(++i) << endl;cout << i << endl;return 0; }

輸出結(jié)果是4 0,sizeof確實(shí)只是對(duì)里面的表達(dá)式做類型字節(jié)的計(jì)算,而并不會(huì)運(yùn)行表達(dá)式。

?

2.對(duì)于一個(gè)數(shù)組,能做的兩件事:確定數(shù)組大小,獲得數(shù)組下標(biāo)為0的元素的指針。

對(duì)于數(shù)組名傳遞的形參,實(shí)質(zhì)都是數(shù)組首元素指針的傳遞。

當(dāng)把數(shù)組名用于sizeof的操作數(shù)時(shí)(此時(shí)數(shù)組名代表數(shù)組,而不是指針),得到的是整個(gè)數(shù)組所有元素所占的字節(jié)總數(shù),即元素個(gè)數(shù)×類型字節(jié)數(shù)。

如果數(shù)組名用于其它場(chǎng)合,都是將其視為指針。

?

3.數(shù)組指針

寫全該名稱,就是“指向數(shù)組的指針”

int a[12][31]; a是一個(gè)有著12個(gè)數(shù)組類型元素的數(shù)組

int (*p)[31]; (*p)是一個(gè)擁有31個(gè)整型元素的數(shù)組,p是指向這個(gè)數(shù)組的指針。

p = a; p指向數(shù)組a的第一個(gè)元素,即有著31個(gè)元素的數(shù)組類型元素的一個(gè)。

int a[12][31]; int (*P)[31]; //p數(shù)組指針,指向a for (p = a; p < &a[12]; p++){int *q;for (q = *p; q < &(*p)[31]; q++){*q = 0;} }

4.指針數(shù)組

數(shù)組指針和指針數(shù)組很容易混淆,關(guān)鍵是語(yǔ)句的讀取順序,從數(shù)組名字開(kāi)始由內(nèi)向外閱讀就比較好區(qū)分。

int *p[31]; //p和[31]結(jié)合,是一個(gè)數(shù)組,數(shù)組元素的類型是(int *)。也就是說(shuō)p是一個(gè)數(shù)組,里面元素是指向整型的指針。

int (*p)[31]; //p和*結(jié)合,是一個(gè)指針,該指針指向一個(gè)有31個(gè)整型元素的數(shù)組。

?

轉(zhuǎn)載于:https://www.cnblogs.com/cnblogsnearby/p/4930819.html

總結(jié)

以上是生活随笔為你收集整理的关于sizeof表达式作为数组元素个数的编译的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。