a,是否都表示陣列a的首元數地址

時間 2022-10-06 13:45:09

1樓:cpp後學

雖然沒有分,不過我還是再補充一點.

(執行以上為什麼沒出錯出)如果你執行真的沒錯,那我可以肯定你用的是vc6.0

那種98年的編譯器還是換一換吧.

你要明白&a是陣列的地址,在c++中陣列是由指標實現的(c中應該也差不多),所以&a也可以理解為陣列指標. 你直接用它對char *p初始化是非法的.需要進行強制轉換.

char *p = (char*)(&a);

或者賦值給一個同樣的陣列指標那麼要顯示字串a就要用**p.

明白否.

&a是合法的.它代表a[3]整個陣列在記憶體中的地址.

理解下面的**對你應該有幫助.c++版的,加了註釋,應該看得懂.

# include

int main()

; int *ptr = (int*)(&a + 1);

std::cout << *(a + 1) << " " << *(ptr - 1)

} /*

輸出結果是: 2 5

在上面的**中, a 是一個陣列,&a 則為整個陣列在記憶體中的地址,&a + 1 等價於 &a + sizeof(a) ,

將這片記憶體賦給指標 ptr ,ptr中儲存的即為它的首地址,也就是a最後一個元素的下一位(超末端),因為 ptr 是一個指標,所以 ptr - 1 等價於

ptr - sizeof(int*).*/

2樓:匿名使用者

你好:(1)a在這個地方是一個地址常量,所以我們可以把它賦值給p;

(2)&是一個取地址符,取的是變數的地址,所以&a在此處就是錯誤的所以他們顯然是不一樣的

祝你好運!

3樓:匿名使用者

第一個:

int *p=a,宣告一個指標並且初始為陣列首地址。等價於int *p;p=a;正確。

第二個:

int *p=&a;編譯錯誤。錯誤資訊如下:

error c2440: 'initializing' : cannot convert from 'int (*)[3]' to 'int *'

等同與int *p;p=&a;這是錯誤的。

a[]是一個陣列,&a[3]表示什麼意思?c++

4樓:樊昊天

這是關於指標方面的知識,&是取地址運算子,就是取a[3]的地址,如還不懂可以追問我

5樓:匿名使用者

獲取陣列a第四個元素的地址

6樓:冷血

a陣列中的第四個元素,下標為0的話。

7樓:育知同創教育

表示取第三個元素的值

為啥a表示陣列首地址而&a表示陣列地址?

8樓:匿名使用者

打個比方:

一個樓 有多個單元,如2個

一個單元 有多層,如:30層

一層有多戶,如4戶

一戶有多個人,如3口

這樣我們可以建立一個四維陣列 people arrp[2][30][4][3] ;

arrp即是樓的首地址

也是第一層的地址

也是第一家的地址

剛好有個人站在門口,也是這個人所在的地址

只是這許多的地址,代表的意義不同

嚴格說a=&a[0]

&a + 1 是下一棟樓

a+1是下一層 = &a[1]

你能理解意思就可以,非要從編譯原理去講,有點累,不如自己去研究體會一下

9樓:

如果有int a[10];,則a是陣列第一個元素a[0]的地址&a[0],由於它是陣列的第一個元素的地址,所以有人稱之為陣列的首地址。而&a為什麼是陣列的地址,實際上是一種語法約定。這是因為在int a[10];前提下,&a[0]+1應該等於&a[1],而&a+1應該等於&a[10],就是說要跳過整個陣列a,所以叫陣列的地址。

其實對於一維陣列&a並沒有多少意義,有a就足夠了;但對於多維,比如二維陣列,從第一行跳到第二行(或多維陣列的第n行),從上面的分析知,引入陣列地址就很方便了。

10樓:匿名使用者

一個意思 a &a &a[0] 是同一個值 就是同一片記憶體的指標

c語言, a就是陣列的首地址啊,那a++不也是地址嗎? 還有,p[5]表示什麼?

11樓:金色潛鳥

a是陣列的首地址,那a++ 也是地址, 這裡的地址 是:

a地址 + 1 * sizeof( a 的型別)p[5] 在宣告裡表示 宣告 p 是陣列,它有5 個元素。例如: int p[5];

p[5] 在語句裡表示 下標變數,它是陣列p裡的第6個元素。 因下標 從 0 起始。 例如:p[5]=666;

語句裡 有等式: p[5] == *(p+5); -- 下標變數 與指標關係。

12樓:滿地花傷

這裡的a++的a不是常量int,所以仍然是地址,p[5]表示p陣列的第5個數

13樓:匿名使用者

如果是int a[10];這裡的a是陣列的首地址,但是const int*型別,也就是常量指標,它的指向不能修改,所以a++是不允許的。

如果有int *p = a;

p++就是指向了下一個整形的地址。

p[5]就是第6個元素。(而不是地址了,是地址對應的整形數)

比如定義一個二維陣列 int a[2][3]既然陣列名a是陣列的首元素地址, 那麼為什麼*a也是

14樓:一位網際網路從業者

二維陣列實際上也是一維陣列,只不過這個一維陣列中的元素比較特殊,每個一維陣列元素又是一維陣列。

打個比方,a[2][3]可以理解為一個一維陣列a[2],只不過a[0]a[1]元素,是一個陣列。

*a是陣列的首個元素,不是地址

15樓:弒緋

你的理解錯了,雖然在你的所說的陣列裡,a和*a確實都是地址,但是兩者是有區別的。

1、首先說a,這裡的a將你的二維陣列陣列看作兩個一維陣列:a[0],a[1](將本來每一行的所有元素看作一個整體),a指的是第0行的首地址。

2、*a,這裡是指將二維陣列看作一個整體,*a指的是這個二維陣列的第0行第0列的首地址。

c語言中二維陣列的a代表是0行首地址,那*a不就是首個元素嗎,為什麼*a代表的還是首個元素的地址

16樓:

哈哈!以下標從0開始說。若a是二維陣列名,則a作常指標使用時,a是第0行的指標,*a是第0行的第一個元素的指標(二者值同,意義不同),**a是第0行的第0個元素的值。

這可以用以下**驗證:

int main(void);

printf("%d\n",**(a+1));

return 0;

}輸出肯定是4。這說明,既然a是第0行的指標,那麼a+1就是第1行的指標,*(a+1)則是第1行第0個元素的指標,**(a+1)當然就是第1行第0個元素的值4了……

17樓:聽不清啊

c語言中二維陣列的a代表是a陣列的首地址(值與0行首地址同),所以*a不是首個元素,*a代表的是0行的首地址,**a才是對首個元素的引用。

18樓:雙子牛總

胃口幾幅畫雞骨頭氣溫會偷偷去hgew

陣列名是首元素的地址。所以a[0]等於&a[0][0] a等於&a[0]。為什麼a和a[0]的值相

19樓:

&是取地址符號,a是陣列名,所以a就表示a[0](首元素)的地址。

同理,對於二維陣列,a[0][0]可以看做陣列a[0]的首元素,所以a[0]就是a[0][0]的地址。

在二維陣列中*a為什麼表示首地址而不是元素呢

20樓:匿名使用者

把二維陣列看做元素為陣列的陣列

則可知,*a其實就是a[0],認可看作為陣列的首個元素,只不過該元素仍是一個陣列

21樓:匿名使用者

因為指標指的就是一個地址,而不針對那個元素呀= =

大於10的偶陣列成的集合用適當的方法表示出來

魚要糧 大於10的偶數表示方法 x x 2n,n 5,n n 所有整數不是奇數 單數 就是偶數 雙數 若某數是2的倍數,它就是偶數 雙數 可表示為2n 若非,它就是奇數 單數 可表示為2n 1 n為整數 即奇數 單數 除以二的餘數是一。 三翼熾天使 結果寫成集合的形式是 x x 2n,n 5,n n...

845865915945表示的主機板型號都是啥意思

845主機板,指的是它的北橋晶片型號是82845 965主機板,指的是它的北橋晶片型號是82865 915主機板,指的是它的北橋晶片型號是82915 945主機板,指的是它的北橋晶片型號是82945 等等以此類推。參見 http image.這是一個845g主機板去掉散熱器後暴露出來的北橋晶片 可以...

在matlab中求元胞陣列中字元出現的次數

基本思路 遍歷元胞訪問元胞的每一個元素並判斷該元素是不是char型別,如果是則進行相應判斷做統計。考慮到cell內部巢狀cell的情況,需要用到遞迴,所以要把 寫成一個函式。函式 如下 function n countcell c,t n 0 s prod size c for i 1 s if s...