第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么數(shù)組的地址等于它在C中的值?

為什么數(shù)組的地址等于它在C中的值?

C C++
拉莫斯之舞 2019-05-27 15:05:17
為什么數(shù)組的地址等于它在C中的值?在下面的代碼中,指針值和指針地址按預(yù)期不同。但數(shù)組值和地址不行!怎么會(huì)這樣?產(chǎn)量my_array = 0022FF00&my_array = 0022FF00pointer_to_array = 0022FF00&pointer_to_array = 0022FEFC#include <stdio.h>int main(){   char my_array[100] = "some cool string";   printf("my_array = %p\n", my_array);   printf("&my_array = %p\n", &my_array);   char *pointer_to_array = my_array;   printf("pointer_to_array = %p\n", pointer_to_array);   printf("&pointer_to_array = %p\n", &pointer_to_array);   printf("Press ENTER to continue...\n");   getchar();   return 0;}
查看完整描述

3 回答

?
MMTTMM

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊

陣列的名稱通常計(jì)算到所述陣列的所述第一元素的地址,所以array&array具有相同的值(但不同類型的,所以array+1&array+1如果數(shù)組超過1個(gè)元件長(zhǎng)是相等的)。

這有兩個(gè)例外:當(dāng)數(shù)組名稱是sizeof或一元&(address-of)的操作數(shù)時(shí),名稱指的是數(shù)組對(duì)象本身。因此,sizeof array為您提供整個(gè)數(shù)組的字節(jié)大小,而不是指針的大小。

對(duì)于定義為的數(shù)組T array[size],它將具有類型T *。當(dāng)/如果你增加它,你會(huì)到達(dá)數(shù)組中的下一個(gè)元素。

&array求值為相同的地址,但給定相同的定義,它會(huì)創(chuàng)建一個(gè)類型的指針T(*)[size]- 即,它是指向數(shù)組的指針,而不是指向單個(gè)元素的指針。如果遞增此指針,它將添加整個(gè)數(shù)組的大小,而不是單個(gè)元素的大小。例如,使用以下代碼:

char array[16];printf("%p\t%p", (void*)&array, (void*)(&array+1));

我們可以期望第二個(gè)指針比第一個(gè)指針大16(因?yàn)樗且粋€(gè)16個(gè)字符的數(shù)組)。由于%p通常以十六進(jìn)制轉(zhuǎn)換指針,因此它可能類似于:

0x12341000    0x12341010


查看完整回答
反對(duì) 回復(fù) 2019-05-27
?
茅侃侃

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超22個(gè)贊

那是因?yàn)?em>數(shù)組name(my_array)與指向數(shù)組的指針不同。它是數(shù)組地址的別名,其地址定義為數(shù)組本身的地址。

但是,指針是堆棧上的普通C變量。因此,您可以獲取其地址并從其中包含的地址獲取不同的值。

在這里寫了這個(gè)主題- 請(qǐng)看一下。


查看完整回答
反對(duì) 回復(fù) 2019-05-27
?
夢(mèng)里花落0921

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超6個(gè)贊

在C中,當(dāng)您在表達(dá)式中使用數(shù)組的名稱(包括將其傳遞給函數(shù))時(shí),除非它是address-of(&)運(yùn)算符或sizeof運(yùn)算符的操作數(shù),否則它將衰減為指向其第一個(gè)元素的指針。

也就是說,在大多數(shù)情況下array,相當(dāng)于&array[0]在這兩個(gè)類型和值。

在您的示例中,my_array具有在將其傳遞給printf時(shí)char[100]衰減到的類型char*。

&my_array有類型char (*)[100](指向數(shù)組100的指針char)。因?yàn)樗遣僮鲾?shù)&,所以這是my_array不會(huì)立即衰減到指向其第一個(gè)元素的指針的情況之一。

指向數(shù)組的指針具有與指向數(shù)組第一個(gè)元素的指針相同的地址值,因?yàn)閿?shù)組對(duì)象只是其元素的連續(xù)序列,但指向數(shù)組的指針與指向元素的指針的指針具有不同的類型。那個(gè)數(shù)組。當(dāng)您對(duì)兩種類型的指針進(jìn)行指針運(yùn)算時(shí),這很重要。

pointer_to_array具有類型char *- 初始化為指向數(shù)組的第一個(gè)元素,因?yàn)樗?code>my_array初始化表達(dá)式中的衰減 - 并且&pointer_to_array 具有類型char **(指向a的指針char)。

其中:( my_array在衰減之后char*),&my_array并且pointer_to_array都直接指向數(shù)組或數(shù)組的第一個(gè)元素,因此具有相同的地址值。


查看完整回答
反對(duì) 回復(fù) 2019-05-27
  • 3 回答
  • 0 關(guān)注
  • 799 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)