一次定義int型別區域性變數,這兩個區域性變數的地址為什么相差位元組

2023-02-02 23:20:07 字數 4466 閱讀 7970

1樓:有你的晴天

首先要達成共識的是:函式內的區域性變數本身就是棧變數,棧的地址肯定是連續的,而且棧變數的地址是逐漸遞減的。

親自測試了一下,在windows環境下每個變數的地址都是-12的而在linux-rhel-5.5下測試,分配的地址是按實際的變數所佔空間遞減的

這二點的不同應該是編譯器決定的。

以下是linux下測試的結果:

2樓:

變數a和變數b不存在記憶體上的類似於陣列元素之間的那種聯絡,就是說,陣列相鄰元素的地址值相差肯定是確定的,但是任意兩個變數之間是沒有這種聯絡的,

你也可以把a,b看正是隻有一個元素的陣列,然後你比較a,b,arr[0]或arr[9]之間的記憶體差,它們肯定是不一樣的

希望可以幫到你!

3樓:匿名使用者

你不要在debug下執行,要在release下執行,就能得到你想要的答案,debug模式下插入了很多與你自己寫的程式無關的東西。。。。

4樓:匿名使用者

可以換release編譯執行下,debug模式下可能會插入一些除錯性**。實測在release版本,相隔4位元組。

5樓:匿名使用者

申請兩個獨立的變數,地址不是緊挨著分配的,是系統隨機分配的

6樓:安順市農業農村局

你可以嘗試列印arr[-1]~arr[-3]看看存了什麼在裡面

連續定義的int變數,地址為什麼相差12個位元組

7樓:

這樣理解

int型別的a佔用了4個位元組的記憶體空間,假設其佔用的空間地址是0x12ff88

也就是說a佔用了從0x12ff88上行或者下行4個位元組大小那麼如果要表示其地址,則需要增加一個4個位元組的變數來存放這個0x12ff88,也就是指標了

8樓:

按照我們的理解,int佔用4個位元組,應該相差4個位元組。

這是因為vs在debug模式下,int變數佔用12個位元組。

可以這樣認為,debug模式下,在int變數的前後各增加了4個位元組,用於儲存除錯資訊。

當我們把模式設為release,就會發現棧上連續定義的int變數,地址相差4個位元組

假定int型別變數佔用兩個位元組,其有定義:int x[10]={0,2,4};,則陣列x在記憶體中

9樓:鈺瀟

20個,x陣列共有10個元素,在花括弧內只提供3個初值,這表示只給前面的3個成員賦值,後7個元素的值為0,所以,一共有20個位元組。

編譯器可以根據自身硬體來選擇合適的大小,但是需要滿足約束:short和int型至少為16位,long型至少為32位,並且short型長度不能超過int型,而int型不能超過long型。

這即是說各個型別的變數長度是由編譯器來決定的,而主流的編譯器中一般是32位機器和64位機器中int型都是4個位元組。

10樓:明日邊緣時空

人家說假定int佔2個位元組 什麼4個位元組,人家題目說粉筆是黑的就是黑的 就算有紅的白的也不行呀 x陣列中有10個元素,只給了0,2,4給你 其他都是預設值0,總共10個整形數,10*2=20位元組嗎?

11樓:

什麼20呀,是10個元素,佔20位元組。

12樓:

首先int佔四個位元組,這是一個整型陣列,分配的是10個記憶體單元,40個位元組,前三個元素是0,2,4,其餘7個預設為0

兩個指標相減

13樓:興文博武數碼館

指標相減=(地址1-地址2)/sizeof(型別)   這個你把他當成定律 ,你要記牢。

指標相減得出的結果就是兩個元素相差的單元, 地址1 和地址2  以%d求出結果,不要用十六進位制,要用十進位制。

在同一個陣列中,相鄰元素相差1個單元,這一個單元不一定是一個位元組,具體多少位元組,看你當初是怎麼分配的。你若是int型的,當初就是每4個位元組一個單元, 咱們一般陣列就int型別用的多。

如圖所示,我的例子中 兩個地址相減是16,  除以4 , 就是4了

14樓:匿名使用者

p1=(int *)ox0500;

p2=(int *)ox0518; 這兩句是吧 0x0500和0x0518這兩個16進位制數強制的作為int型變數的地址。兩個int型變數的地址之差就是這兩個地址中間可以有多少個int型變數。(這是因為c語言可以根據變數的型別來決定地址增加的實際空間。

比如你定義一個int指標int *p,p=p+1時,其實在記憶體地址中實際加4,因為int在c中4個位元組。)

0x0518-0x0500=24 24/4=6 所以結果應該為6 即兩個地址之間可以有6個int變數的空間。

15樓:匿名使用者

所得地址差除以指標所指向型別的sizeof像你這個就是sizeof(int)。就是value的值

16樓:匿名使用者

24 或者12.不過,個人認為 是12.因為,int 佔有2個位元組。表示相距有12個int型的資料長度。

假定int型別變數佔用兩個位元組,若有定義int x[10]={0,2,4},則陣列x在記憶體中所佔字

17樓:匿名使用者

陣列x在記憶體中所佔位元組數是20個位元組。

因為陣列初始化的時候宣告陣列的大小為10,一個int型別變數佔用兩個位元組,則10個型別變數佔用20個位元組。

在 c 中要宣告一個陣列,需要指定元素的型別和元素的數量,如下所示:

type arrayname [ arraysize ];

這叫做一維陣列。arraysize 必須是一個大於零的整數常量,type 可以是任意有效的 c 資料型別。

18樓:匿名使用者

20個,int x[10],已經確定了x的大小是10個,所以儲存單元(byte, 1 int = 2 byte, 16位系統上)就是確定的了。 ,只是把前3個儲存單元進行了初始化而已。

19樓:耘熵

int x[10] 不管存放多少資料,系統都在棧中為 x 分配10個int (32 位系統是 40 位元組)記憶體空間。

20樓:

c語言中是20個位元組,c++中是40個位元組

假定int型別變數佔用兩個位元組,若有定義int x[10]={0,2,4},則陣列x在記憶體中所佔

21樓:匿名使用者

20個,int x[10],已經確定了x的大小是10個,所以儲存單元(byte, 1 int = 2 byte, 16位系統上)就是確定的了。 ,只是把前3個儲存單元進行了初始化而已。

假定int型別變數佔用兩個位元組,其有定義:int x[10]={0,2,4};,則陣列x在記憶體中所佔位元組數是多少

22樓:鈺瀟

20個,x陣列共有10個元素,在花括弧內只提供3個初值,這表示只給前面的3個成員賦值,後7個元素的值為0,所以,一共有20個位元組。

編譯器可以根據自身硬體來選擇合適的大小,但是需要滿足約束:short和int型至少為16位,long型至少為32位,並且short型長度不能超過int型,而int型不能超過long型。

這即是說各個型別的變數長度是由編譯器來決定的,而主流的編譯器中一般是32位機器和64位機器中int型都是4個位元組。

23樓:匿名使用者

這句的效果等效於

int x[10]=;

其中t表示隨機數。

所以是20byte。

24樓:匿名使用者

int型變數佔兩個位元組,一共有十個元素,所以是二十個位元組。

25樓:大學生的店鋪

則陣列x在記憶體中所佔位元組數是多少20。

2*10=20

被人玩了一次又一次,被人玩了一次又一次!

不知道你們為什麼會分手,如果是她不愛你了,那麼分開也是一種解脫。我站在你女朋友的角度想,或許她很痛苦,女生不想與家裡人訴說一些她在感情中的挫敗,這是很正常的。她或許會找個介面給家裡人,讓他們不為她傷心難過。也或許會為挽回自己的面子去編造一個故事,為的是去逃避那些失去的痛,同時會在諷刺性的虛構情節中傷...

解一元一次方程15道包含各個型別

一元一次方程 1.2 x 2 3 4x 1 9 1 x 4x 4 12x 3 9 9x 8x 9x 9 3 4 x 10 2.11x 64 2x 100 9x 11x 2x 9x 100 64 18x 36 x 23.15 8 5x 7x 4 3x 15 8 5x 7x 4 3x 5x 7x 3x ...

形容一次又一次的成語有哪些,形容一次又一次,多次重複的成語是什麼?

千篇一律 翻來覆去 三番五次 周而復始 層見迭出。1 千篇一律 拼音 qi n pi n y l 釋義 專指文章屬公式化。也比喻辦事按一個格式,非常機械。出處 明 王世貞 藝苑卮言 千篇一律 詩道未成 慎勿輕看 最能易人心手。2 翻來覆去 拼音 f n l i f q 釋義 形容一次又一次。也形容來...