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

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

數(shù)組名稱是指針嗎?

數(shù)組名稱是指針嗎?

牧羊人nacy 2019-05-21 15:54:25
數(shù)組名稱是指針嗎?數(shù)組的名稱是C中的指針嗎?如果沒有,數(shù)組的名稱和指針變量之間有什么區(qū)別?
查看完整描述

6 回答

?
犯罪嫌疑人X

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

數(shù)組是一個數(shù)組,指針是指針,但在大多數(shù)情況下,數(shù)組名稱將轉(zhuǎn)換為指針。經(jīng)常使用的一個術(shù)語是它們會衰減到指針。

這是一個數(shù)組:

int a[7];

a 包含七個整數(shù)的空間,你可以在其中一個中賦值賦值,如下所示:

a[3] = 9;

這是一個指針:

int *p;

p不包含任何整數(shù)空格,但它可以指向整數(shù)的空格。例如,我們可以將其設(shè)置為指向數(shù)組中的一個位置a,例如第一個:

p = &a[0];

可能令人困惑的是你也可以這樣寫:

p = a;

這并沒有數(shù)組的內(nèi)容復(fù)制a到指針p(無論這將意味著)。相反,數(shù)組名稱a將轉(zhuǎn)換為指向其第一個元素的指針。因此,分配與前一個分配相同。

現(xiàn)在您可以p以類似的方式使用數(shù)組:

p[3] = 17;

這有效的原因是C,中的數(shù)組解除引用運(yùn)算符[ ]是根據(jù)指針定義的。x[y]意思是:從指針開始x,步驟y元素在指針指向的位置之后前進(jìn),然后取出那里的任何東西。使用指針?biāo)阈g(shù)語法,x[y]也可以寫成*(x+y)。

為了做到這與正常的陣列,比如我們的工作a,該名稱aa[3]必須首先被轉(zhuǎn)換為一個指針(在第一元件a)。然后我們向前邁出3個元素,并采取任何在那里。換句話說:將元素放在數(shù)組中的第3位。(這是數(shù)組中的第四個元素,因?yàn)榈谝粋€元素編號為0.)

因此,總之,C程序中的數(shù)組名稱(在大多數(shù)情況下)轉(zhuǎn)換為指針。一個例外是我們sizeof在數(shù)組上使用運(yùn)算符。如果a在此上下文中轉(zhuǎn)換為指針,sizeof a則會給出指針的大小而不是實(shí)際數(shù)組的大小,這將是相當(dāng)無用的,因此在這種情況下a意味著數(shù)組本身。


查看完整回答
反對 回復(fù) 2019-05-21
?
小怪獸愛吃肉

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個贊


當(dāng)數(shù)組用作值時,其名稱表示第一個元素的地址。

當(dāng)數(shù)組未用作值時,其名稱表示整個數(shù)組。


int arr[7];


/* arr used as value */

foo(arr);

int x = *(arr + 1); /* same as arr[1] */


/* arr not used as value */

size_t bytes = sizeof arr;

void *q = &arr; /* void pointers are compatible with pointers to any object */


查看完整回答
反對 回復(fù) 2019-05-21
?
LEATH

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個贊

一個像這樣聲明的數(shù)組


int a[10];

分配內(nèi)存10 int秒。你不能修改,a但你可以用指針?biāo)阈g(shù)a。


像這樣的指針只為指針分配內(nèi)存p:


int *p;

它沒有分配任何ints。你可以修改它:


p = a;

并使用數(shù)組下標(biāo),你可以使用:


p[2] = 5;

a[2] = 5;    // same

*(p+2) = 5;  // same effect

*(a+2) = 5;  // same effect


查看完整回答
反對 回復(fù) 2019-05-21
?
繁星coding

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

我認(rèn)為這個例子揭示了這個問題:


#include <stdio.h>

int main()

{

        int a[3] = {9, 10, 11};

        int **b = &a;


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

        return 0;

}

它在gcc 4.9.2中編譯好(帶有2個警告),并打印以下內(nèi)容:


a == &a: 1

哎呀:-)


所以,結(jié)論是否定的,數(shù)組不是指針,它不是作為指針存儲在內(nèi)存中(甚至不是只讀的指針),即使它看起來像是,因?yàn)槟憧梢杂茫\(yùn)算符獲取它的地址。但是 - 哎呀 - 操作員不工作:-)),不管怎樣,你都被警告過:


p.c: In function ‘main’:

pp.c:6:12: warning: initialization from incompatible pointer type

  int **b = &a;

            ^

p.c:8:28: warning: comparison of distinct pointer types lacks a cast

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

C ++在編譯時拒絕任何此類錯誤嘗試。


編輯:


這就是我要展示的意思:


#include <stdio.h>

int main()

{

    int a[3] = {9, 10, 11};

    void *c = a;


    void *b = &a;

    void *d = &c;


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

    printf("c == &c: %d\n", c == d);

    return 0;

}

即使c并且a“指向”相同的內(nèi)存,也可以獲取c指針的地址,但是無法獲取a指針的地址。


查看完整回答
反對 回復(fù) 2019-05-21
  • 6 回答
  • 0 關(guān)注
  • 1222 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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