亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++數組的存儲|C++數組所占內存空間

2020-05-23 14:27:31
字體:
來源:轉載
供稿:網友
我們以前說變量像箱子,數組像倉庫。在這一節,我們要來深入探究一下,這些“箱子”和“倉庫”在電腦內部是怎樣擺放的。

內存和地址

我們知道變量和數組都是放在內存里的,我們有時候還能夠聽到內存地址(Address)這個詞。那么地址究竟是什么意思呢?

其實在內存里,就像是許許多多的街道,每條街道有它的名字,而街道上的每幢房子又按順序地編了號,于是街道名和房子在街道上的編號就能確定內存中唯一的一幢房子,我們在這里認為所有的數據在內存中都是放在房子里。電腦就是依照這個原理找到所要的訪問或修改的數據的。街道名和房子在街道上的編號就稱為這個房子的地址。我們通常把地址表示為一串十六進制的數。關于十六進制數我們在這里不作展開說明。

C++數組的存儲|C++數組所占內存空間那么這些內存中的房子和我們所說的變量和數組是什么關系呢?在內存里的房子的大小是規定的,每幢房子只能存儲一個字節(Byte)的數據。(一個字節相當于一個半角的英文字母,一個漢字需要占用兩個字節。)有時候,一種類型的變量需要比較大的空間,比如一個浮點型的實數,一幢房子是放不下的,而是需要4幢房子的空間才能放得下。于是電腦就把連起來的4幢房子拼起來,每幢房子放這個實數的一部分數據。而這連起來的4幢房子,構成了一個能夠存放浮點型實數的變量。

我們認為,內存中的“房子”是客觀存在的,每幢房子的大小一樣,沒有任何區別;而不同類型的變量“箱子”則是由若干幢房子拼接而成,箱子在內存中是不存在的,只是我們為了方便理解而臆想出來的。右圖就是一個浮點型變量在內存中的情況。(圖7.2.1)

數組在內存中的存儲情況

C++數組的存儲|C++數組所占內存空間變量在內存中是由若干個相鄰的“房子”拼接而成的,而數組在內存中則是由若干個相鄰的數組元素按順序拼接而成的。每個數組元素又相當于一個變量。左圖是一個大小為3的短整型(short)數組在內存中的情況。(圖7.2.2)

我們在上一節的最后說到可以省略數組的大小,但是這樣一來我們就無法得知數組的大小了,這將可能造成越界訪問。當我們了解了數組在內存中的存儲情況后,我們就能夠知道數組的大小了。在C++中,有一個名為sizeof的操作符,可以求出一個數組或一種數據類型在內存中占了多少“房子”,它的使用方法是:
    sizeof(數組名或數據類型);

通過左圖我們可以理解,要求出數組的大小,應該是用整個數組占的“房子”數除以每一個數組元素占的“房子”數,即6除以2等于3。下面我們就來看一個求出數組大小的程序實例:(程序7.2.1)
#include "iostream.h"
int main()
{
int array[]={3,5,6,8,7,9};
int size=sizeof(array)/sizeof(int);
cout <<"size="<<size <<endl;
for (int i=0;i<size;i++)
cout <<array[i] <<" ";
cout <<endl;
return 0;
}
運行結果:
size=6
3 5 6 8 7 9

通過這個程序,可以成功地知道一個數組的大小,我們也不用為可能發生的越界訪問而發愁了。

字符的存儲情況

電腦是用電來計算和保存信息的。在電腦里,就好像有許許多多的開關,用導通(開)來表示1,用斷開(關)來表示0。那么這些個“0”和“1”是怎么來表示一些字符的呢?

當只有一個開關的時候,這個開關能表示兩種狀態,即0和1;當有兩個開關的時候,這兩個開關可以表示四種狀態,即00、01、10、11……如果你學過排列,就不難理解,當有8個開關的時候,可以表示28=256種狀態,分別是0~255。在電腦中,就是用8個開關(0或1)來表示一個字節的,每一個開關(0或1)稱為一個“位”(Bit),即8位組成一個字節。我們把一個字節所能表示的256種狀態和256個字符按一定的順序一一對應起來,一個字節就可以表示256種不同的字符。這種用8位二進制表示一個字符的編碼稱為ASCII碼(念aski),它的全稱是美國信息交換標準碼(America Standard Code for Information Interchange)。我們需要記住的ASCII碼有三個,數字0的ASCII碼為十進制的48,大寫字母A的ASCII碼為十進制的65,小寫字母a的ASCII碼為十進制的97。

下面我們就來編寫一段程序,輸出ASCII碼表的常用部分:(程序7.2.2)
#include "iostream.h"
#include "iomanip.h"
int main()
{
   char temp;
   for (int i=32;i<=127;i++)
   {
      temp=i;
      cout << setw(2) <<temp;
      if (i%16==15) //從0~15正好16個,所以余數為15的時候換行
      {
         cout <<endl; 
      }
   }
   return 0;
}
運行結果:
C++數組的存儲|C++數組所占內存空間
以上這段程序輸出了96個常用的字符,從空格(ASCII碼為十進制的32)一直到三角(ASCII碼為十進制的127)。每行16個字符,共6行。有些人可能要問一個問題,上面這段程序中怎么能把整型變量i賦值給字符型變量temp呢?根據前面我們所說的字符的存儲原理,不難發現字符的實質是一個0~255的整數,所以把一個在這個范圍內的整數賦值給字符變量在C++中是允許的。

字符數組在內存中的存儲情況

我們以前說過,字符和字符串是不同的:字符只能是一個,而字符串是由若干個字符連接而成??墒?,’a’和”a”有區別嗎?

其實字符和字符串的區別有點像單詞和句子的區別。一句句子可能只有一個單詞組成,但是句號卻是必不可少的,否則就不能稱為句子了。字符串在結尾處也會加上一個“句號”來表示字符串的結束,稱為結尾符。在C++中用數組表示的字符串的結尾符是’/0’,它也是一個字符。所以字符串”a”實際上是兩個字符,即字符’a’和結尾符’/0’。

在初始化一個字符數組的時候有兩種初始化方式,一種是按字符串初始化,一種是按字符初始化。按字符串初始化就會在最后一個元素出現結尾符,而結尾符也要占用一個字符的空間,所以在聲明數組的時候一定要注意空間是否足夠。下面我們就來看一下這兩種初始化方法:(程序7.2.3)
C++數組的存儲|C++數組所占內存空間#include "iostream.h"
int main()
{
   char a[]={"Hello"};//按字符串初始化
   char b[]={'H','e','l','l','o'};//按字符初始化
   char c[]={'H','e','l','l','o','/0'};//按字符串初始化
   cout <<"Size of A=" <<sizeof(a) <<endl;
   cout <<"Size of B=" <<sizeof(b) <<endl;
   cout <<"Size of C=" <<sizeof(c) <<endl;
   cout <<a <<endl;
   cout <<b <<endl;
   cout <<c <<endl;
   return 0;
}
運行結果:
Size of A=6
Size of B=5
Size of C=6
Hello
Hello燙蘃ello
Hello

從數組a、b和c的大小,我們就能看出按字符串和按字符初始化的不同了。你可能還會發現,輸出的數組a和c都是正常的,為什么輸出的b卻夾雜著亂碼呢?這是因為a和c的屬性都是字符串的字符數組,而b是普通字符數組。b數組沒有結尾符,電腦在輸出它的時候就會發生問題了。

數組a和b在內存中的存儲情況如右上圖所示(圖7.2.3)
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美视频在线观看免费网址| 青草青草久热精品视频在线网站| 91国语精品自产拍在线观看性色| 色七七影院综合| 亚洲影院色在线观看免费| 日韩美女写真福利在线观看| 在线电影中文日韩| 亚洲人成自拍网站| 亚洲国产精久久久久久久| 国产精品福利网| 亚洲国产精品99久久| 亚洲精品乱码久久久久久金桔影视| 欧美日韩国产激情| 亚洲综合精品一区二区| 日韩精品中文字幕在线| 亚洲欧美第一页| 国产精品电影久久久久电影网| 97色在线视频| 欧美洲成人男女午夜视频| 57pao成人国产永久免费| 国产精品爽黄69天堂a| 日韩a**中文字幕| 91最新国产视频| 欧美丝袜第一区| 久久久久久久久中文字幕| 久久99热精品这里久久精品| 91精品国产综合久久香蕉最新版| 国产精品午夜视频| 亚洲免费人成在线视频观看| 美女精品视频一区| 欧美日韩黄色大片| 国产成人午夜视频网址| 国产亚洲精品高潮| 一区二区三区四区在线观看视频| 亚洲r级在线观看| 日韩久久午夜影院| 色诱女教师一区二区三区| 欧美性猛交xxxx免费看漫画| 美女撒尿一区二区三区| 亚洲男子天堂网| 国产手机视频精品| 国产精品wwwwww| 国内成人精品视频| 国产精品444| 亚洲高清在线观看| 亚洲第一区中文99精品| 亚洲自拍高清视频网站| 亚洲新声在线观看| 欧美成人免费在线视频| 色妞久久福利网| 久久久久国色av免费观看性色| 欧美黄色小视频| 一区二区三区四区精品| 欧美黑人一区二区三区| 国产亚洲日本欧美韩国| 国产精品视频网址| 久久精品成人欧美大片古装| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲黄色av网站| 在线国产精品播放| 在线观看欧美www| 亚洲免费高清视频| 亚洲a成v人在线观看| 日韩欧美在线字幕| 日韩视频免费在线| 日本精品久久电影| 国产精品99免视看9| 91精品免费视频| 亚洲欧洲成视频免费观看| 欧美精品情趣视频| 日韩精品视频在线免费观看| 欧美日韩国产专区| 亚洲一区二区三区在线视频| 久久精品一偷一偷国产| 亚洲福利在线视频| 亚洲第一福利在线观看| 日韩av免费一区| 久久精品国产v日韩v亚洲| 色综合久久久888| 亚洲欧美日韩精品久久奇米色影视| 欧美裸体xxxx极品少妇软件| 在线视频欧美性高潮| 亚洲国产中文字幕在线观看| 国产美女精品视频免费观看| 成人免费直播live| 成人av在线天堂| 国产亚洲精品久久久久久牛牛| 北条麻妃一区二区在线观看| zzjj国产精品一区二区| 奇米影视亚洲狠狠色| 日日摸夜夜添一区| 91久久国产综合久久91精品网站| 国产精品欧美激情在线播放| 久久99热这里只有精品国产| 成人有码视频在线播放| 久久久久久久影院| 欧美性猛交xxxx免费看久久久| 精品自在线视频| 日韩www在线| 亚洲精品wwwww| 日日骚av一区| 狠狠色噜噜狠狠狠狠97| 久久青草福利网站| 欧美乱大交xxxxx| 九九热99久久久国产盗摄| 久久人人爽人人爽爽久久| 日韩精品丝袜在线| 日韩在线观看视频免费| 欧美成人精品h版在线观看| 最近免费中文字幕视频2019| 国产99久久精品一区二区| 黄网动漫久久久| 91久久精品国产| 人九九综合九九宗合| 成人黄色中文字幕| 精品国产乱码久久久久酒店| 日韩欧美a级成人黄色| 国产精品女主播| 欧美裸体xxxx极品少妇软件| 福利一区福利二区微拍刺激| 欧美日韩成人免费| 91精品视频在线看| 亚洲18私人小影院| 国产v综合ⅴ日韩v欧美大片| 中文字幕亚洲欧美日韩在线不卡| 亚洲aⅴ男人的天堂在线观看| 国产成人精品日本亚洲专区61| 亚洲黄页网在线观看| 日日狠狠久久偷偷四色综合免费| 久久精品国产清自在天天线| 国产91在线视频| 亚洲女人初尝黑人巨大| 中文字幕亚洲二区| 欧美亚洲在线视频| 欧美精品福利视频| 日韩在线观看免费高清| 日韩精品中文字| 亚洲欧美日韩国产中文| 中文字幕精品久久| 国产成人精品久久二区二区91| 成人免费在线网址| 亚洲片在线资源| 亚洲欧美色图片| 欧美国产精品人人做人人爱| 欧美肥婆姓交大片| 韩剧1988免费观看全集| 国产欧洲精品视频| 伦理中文字幕亚洲| 精品亚洲国产成av人片传媒| 亚洲精品久久久久中文字幕欢迎你| 国产精品麻豆va在线播放| 欧美亚洲日本黄色| 久久天天躁夜夜躁狠狠躁2022| 黑人巨大精品欧美一区二区免费| 亚洲自拍偷拍第一页| 久久精品男人天堂| 久久久久久com| 亚洲国产成人91精品| 亚洲福利精品在线| 久久久噜噜噜久噜久久| 精品久久久久久久久久久久久久| 97在线视频国产| 超碰97人人做人人爱少妇| 九九九热精品免费视频观看网站|