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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

c中的數(shù)組名到底是什么?

c中的數(shù)組名到底是什么?

C
幕布斯6054654 2019-08-03 14:03:39
c中的數(shù)組名到底是什么?在C中,我很難理解數(shù)組名稱的類型和用法,這似乎是一篇很長的文章,但請耐心等待。據(jù)我所知,以下聲明a類型int []I.整數(shù)數(shù)組.int a[30];當a還指出數(shù)組的第一個元素,以及類似*(a+2)都是有效的。因此,a看上去像指向整數(shù)的指針..但實際上int []和int*是不同的,而前者是數(shù)組類型后來是指向整數(shù)的指針.也是一個類型的變量int []獲取轉(zhuǎn)換為類型的變量。int*傳遞給函數(shù)時;如C數(shù)組通過引用傳遞(除sizeof(操作員)這是一個讓我垂頭喪氣的問題。請看下面的代碼:int main(){     int (*p)[3];     int a[3] = { 5, 4, 6 };     p = &a;     printf("a:%d\t&a:%d\n",a,&a);     printf("%d",*(*p + 2));}產(chǎn)出:a:2686720       &a:26867206那么,上面的代碼是如何工作的呢?我有兩個問題:a和&a有同樣的價值。為什么?究竟是什么int (*p)[3];做?它宣布指向數(shù)組的指針我知道這個。但是如何是一個指向數(shù)組的指針不同于指向數(shù)組的第一個元素的指針。和數(shù)組的名稱?有人能把事情弄清楚嗎?我有很多困惑。我知道我應該用%p作為占位符,而不是使用%d用于打印指針變量的值。由于使用整數(shù)占位符,可能會打印截斷地址。但我只想保持簡單。
查看完整描述

3 回答

?
慕尼黑的夜晚無繁華

TA貢獻1864條經(jīng)驗 獲得超6個贊

  1. A和&a的價值是一樣的,怎么回事?

它們的價值相同,但類型不同。數(shù)組對象在元素之間沒有填充(前后),因此數(shù)組的地址和數(shù)組的第一個元素的地址是相同的。

即:

(void *) a == (void *) &a
  1. 它到底做了什么int(*p)[3];定義指向數(shù)組的指針,我知道,但是,指向數(shù)組的指針與指向數(shù)組的第一個元素的指針和數(shù)組的名稱有什么不同呢?

這是兩種不同的指針類型。例如,指針算法:

a + 1   /* address of the second element of the array */&a + 1  /* address one past the last element of the array */

編輯:由于普遍的需求,我在下面添加了一些關(guān)于數(shù)組轉(zhuǎn)換的信息。

除三個例外情況外,在表達式中,類型為T被轉(zhuǎn)換為類型指針的值。T指向數(shù)組的第一個元素。如果對象是sizeof&如果對象是字符串,則初始化數(shù)組。

例如,這一聲明:

printf("a:%d\t&a:%d\n", a, &a);

實際上相當于:

printf("a:%d\t&a:%d\n", &a[0], &a);

還請注意d轉(zhuǎn)換說明符只能用于打印有符號整數(shù);要打印指針值,必須使用p說明符(參數(shù)必須是void *)。因此,要正確地做事情,請使用:

printf("a:%p\t&a:%p\n", (void *) a, (void *) &a);

分別:

printf("a:%p\t&a:%p\n", (void *) &a[0], (void *) &a);




查看完整回答
反對 回復 2019-08-04
?
GCT1015

TA貢獻1827條經(jīng)驗 獲得超4個贊

其他答案已經(jīng)解釋了這個問題。我正試著用一些圖表來解釋它。希望這會有幫助。


當您聲明一個數(shù)組時

int a[3] = {5, 4, 6}

內(nèi)存安排看上去就像

https://img1.sycdn.imooc.com//5d27e9da00019ee805260097.jpg

現(xiàn)在回答你的問題:

  1. a

    &a

    有同樣的價值。怎么回事?

你已經(jīng)知道a的數(shù)組類型和數(shù)組名稱。a成為指向數(shù)組的第一個元素的指針。a(衰變后),即指向地址0x100..請注意0x100也是內(nèi)存塊的起始地址(數(shù)組)。a)。你應該知道,一般來說,第一個字節(jié)的地址稱為變量的地址。..也就是說,如果一個變量是100個字節(jié),那么它的地址等于它的第一個字節(jié)的地址。

&a是整個內(nèi)存塊的地址,即它是數(shù)組的地址。a..見圖表:

https://img1.sycdn.imooc.com//5d27e9dd000115f105300240.jpg

現(xiàn)在你可以理解為什么a&a雖然兩者的類型不同,但兩者的地址值是相同的。

它到底是做什么的int (*p)[3];聲明一個指向數(shù)組的指針,我知道這一點。但是,指向數(shù)組的指針與指向數(shù)組的第一個元素的指針和數(shù)組的名稱有什么不同呢?

參見上面的圖,我們清楚地解釋了指向數(shù)組的指針與指向數(shù)組元素的指針是如何不同的。
當你分配&ap,然后p指向具有起始地址的整個數(shù)組。0x100.


注:關(guān)于這條線

..如C數(shù)組由引用傳遞(除sizeof職能)。

在C中,參數(shù)是通過值傳遞的。在C中不通過引用傳遞,當一個普通變量被傳遞給一個函數(shù)時,它的值是復制對相應參數(shù)的任何更改都不會影響變量。
數(shù)組也是通過值傳遞的,但不同的是,數(shù)組名稱會衰減到指向第一個元素的指針,而分配給函數(shù)的參數(shù)(此處,指針值被復制)的指針;數(shù)組本身不會被復制。
與普通變量不同,用作參數(shù)的數(shù)組不受任何更改的保護,因為數(shù)組本身沒有復制。,而是將指針復制到第一個元素。

你也應該注意到sizeof不是函數(shù),在這種情況下,數(shù)組名稱不充當參數(shù)。sizeof操作者數(shù)組名作為操作數(shù)..當數(shù)組名稱是一元的操作數(shù)時,也是正確的。&接線員。




查看完整回答
反對 回復 2019-08-04
?
鴻蒙傳說

TA貢獻1865條經(jīng)驗 獲得超7個贊

  1. a對應于指向數(shù)組第0元素的指針。然而,&.的情況也是如此,它只是給出了數(shù)組的起始地址。

作為,a   --> pointer pointing to starting element of array a[],it does not know about other element's location..

&a  --->address location for storing array a[] which stores first element location,but knows every element's location.

類似地,其他元素的位置將是(a+2),(a+4),直到數(shù)組的末尾。

因此,你得到了這樣的結(jié)果。

  1. int(*p)[3]是指向數(shù)組的指針。如果是int*p[3],其含義將完全不同。這將意味著一系列的指針,這將是完全不同的上下文。

指向數(shù)組的指針將自動處理數(shù)組中的所有其他元素。

然而,指向數(shù)組的第一個元素的指針,即a只知道數(shù)組的第一個元素,您必須手動給指針算術(shù)方向來訪問下一個元素。參見,在本例中-我們可以通過將2添加到a,即將第三個元素添加到a,即a+4,以此類推,從a獲得第二個元素。/注意兩者的區(qū)別,因為它是一個整數(shù)數(shù)組!



查看完整回答
反對 回復 2019-08-04
  • 3 回答
  • 0 關(guān)注
  • 348 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

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