1. 程式人生 > >陣列名a和&a的區別

陣列名a和&a的區別

  這裡我們先看看陣列名代表的是什麼,這個概念可能大家有所誤解,認為陣列名代表的就是陣列的地址,當然,陣列名代表的是一個地址,但是關鍵是,通過這個地址,我們關注的是它能取得多大空間的資料的值,例如對於一個char 型別的地址,我們能夠取得一個位元組的值,對於一個int型的地址,我們能夠取得4個位元組的值。

    這裡我們以整形陣列為講解:int  a[4];

   a是一個地址,我們知道a其實本來的面目應該是:a+0,只不過這個0我們就省了,*(a+0)是什麼呢,這個代表的就是取得第一個元素的內容,也就是a[0],所以我們可以知道a它代表的應該是第一個(下標為0)元素的地址。

   這裡我們先從另外一個方面來理解什麼是陣列,其實我們可以把陣列假設為一個基本型別變數,它的型別為 int [4].

也就是變數a這個物件代表的就是4個int那麼大小的一個區間,而且不可分割。它和一般變數不同的地方在於,它的操作受限,不能像一般變數那樣,直接通過賦值符號一次性將整個區間的值賦值給另外一個相同的陣列變數。而只能通過下標來一個個元素的賦值。

   通過上面的分析,&a就好理解了,他就是變數a的地址,這個變數a的作用範圍是四個int空間的資料,也就是如果將&a賦給某個變數p,p的型別應該是:int (*)[4];也就是指向包含4個int資料的陣列的指標。

   再來看看a+1和&a+1的區別,a+1表示的是陣列第一個元素地址,&a+1表示的是跨過a陣列的下一個地址。通過圖來表示可能更加清晰可理解:

&a與a的差別

   其實&a和a的值倒是完全一樣的,都是下標為0的元素的地址,關鍵在於它們的作用域不同,在網上看到一個比喻覺得挺恰當的,長沙在長沙市來說是中心,同時在湖南省來說,也是湖南省的政治中心,長沙即作為市的中心,也作為省的中心,但是在不同的範圍內,表達的意思是不一樣的。

相關推薦

列名a&a區別

  這裡我們先看看陣列名代表的是什麼,這個概念可能大家有所誤解,認為陣列名代表的就是陣列的地址,當然,陣列名代表的是一個地址,但是關鍵是,通過這個地址,我們關注的是它能取得多大空間的資料的值,例如對於一個char 型別的地址,我們能夠取得一個位元組的值,對於一個int型的地址

C++列名a&a區別

先看一道測試題: int main() { int a[5] = {1, 3, 0, 4, 6}; int *p = (int*)(&a + 1); cout<<*(a +

a++++a區別

mage static 改變 sharp namespace string main arp har using System; using System.Collections.Generic; using System.Linq; using System.Text;

a++ ++a區別

可見 定義 存儲 表達 return 它的 存在 ati 常量 a++ 和 ++a 的區別 1)首先說左值和右值的定義: 變量和文字常量都有存儲區,並且有相關的類型。區別在於變量是可尋址的(addressable)對於每一個變量都有兩個值與其相聯:

python中a+=aa=a+a區別

tuple 圖片 影響 變量 9.png 更改 .com fonts 自身 += 是 + 的一種升級版本, 具有能把執行後的結果再寫回傳遞來的變量本身的功能, 可變變量自身有比不可變變量多一個魔法方法 _iadd_, += 操作調用 _iadd_方法,沒有該方法時,再嘗試調

Tensorflow 中tf.shape(a)a.get_shape()的區別

一、tf.shape(a) 和 a.get_shape()比較 相同點:都可以得到tensor a 的尺寸 不同點:tf.shape(a)中a資料的型別可以是tensor,list,array,而a.get_shape()中的a的資料型別必須是tensor,且返回的是一個t

int * p =NULL;*p =NULL的區別a&a區別

1.int * p =NULL;和*p =NULL的區別 1 .int * p =NULL int *p=NULL; 定義一個指標變數p,其指向的記憶體裡面儲存的是int型別的資料;再定義變數p的

numpy中a[][][] a[, , ]兩種索引方式的區別

之前一直對a[][][] 和 a[, , ]兩種索引方式的區別不清楚,今天試驗了一下。 根據三個維度分別是:還是數字,共2^3^ =8種情況進行了實驗。 1、a[:][:][:] 與 a[:, :, :](等價於a[:]), a[1][0][2] 與 a[1,

一維陣列a[5]中&aa區別

#include "stdio.h" int main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf("%d,%d",*(

c語言陣列中a&a[0]的區別

p=a與p=&a[o] 等價解釋: p=&a[0] 與 p=a 等價是指,a和&a[0] 指向同一個地址(只是表示的意義不一樣)。 a是整個元素的地址,也就是陣列的起始地址,

a++++a區別舉例

  int a=9,b=5,c=5,d;   b=a++;   System.out.println("b="+b);//輸出結果為9,說明在a++這一行中a的值並未發生變化,所以b取a的值仍為9;   b=a;   System.out.println("b="+b)

java 中 null == a a == null 的區別

在一些書籍和部落格裡會看到一種說法,判空時建議 null 放前面。照葫蘆直接在專案中用,結果被組長問:為什麼要這麼寫?我一下子懵了,不知道怎麼回答。最近整理才明白當中原因,理由如下: 我們在程式碼中判空時,if (a == null),有可能手快寫成 if (

左值右值的區別(以a++++a為例)

左值(lvalue)和右值(rvalue)最先來源於編譯。在C語言中表示位於賦值運算子兩側的兩個值,左邊的就叫左值,右邊的就叫右值。 定義: 左值指的是如果一個表示式可以引用到某一個物件,並且這個物件是一塊記憶體空間且可以被檢查和儲存,那麼這個表示式就可以作為一個左值。 右值指的是引用了一個儲存在某個記憶

【C++】(++a)(a++)區別解讀

簡介code&result1 簡介 ++a和a++,都是個表示式,最後的結果就取決於是先加,還是後加;如果是先加,那麼最後的表示式的結果就是a的值加1;如果是後加的話,則表示式的值就是原來a

shell script中的 ${a}$a有什麼區別

        最近碰到這個問題, 差點踩坑, 來記錄一下, 看看: #!/bin/bash echo $9 $10 echo $9 ${10}        看一下執行結果: xxxxxx$ .

C語言中的++aa++的區別

自增自減1、++自增運算子:如a++,++a都等價於a = a + 1;2、--自減運算子:如a--,--a都等價於 a = a -1; 雖然++a和a++等價的結果一樣,但是運算過程確大不相同,以下舉例說明: #include <stdio.h> int

深入剖析C函式引數的結合順序及a++++a區別

C語言函式引數的結合順序 今天上課時老師提出了一個關於C語言的函式引數的結合順序的問題以及a++和++a有什麼區別的問題,為了弄清楚這個問題,我寫了如下的程式碼反彙編進行分析: #include <stdio.h> #include <

Java中的a++++a區別

ref num 表達 view 表示 system net function blog 1、a++和++a的區別 a++表示先將a放在表達式中運算,然後再加1; ++a表示先將a加1,然後再放在表達式中運算 2、實例 (1)Java代碼 /

C函式中形參為引用的情況;C++中 *a *&a區別

開發十年,就只剩下這套架構體系了! >>>   

[Bash] 陣列 - 列印不包含aA的國家名

#!/bin/bash read cnty idx=0 while [ -n "$cnty" ] do arr[idx]="$cnty" read cnty let idx+=1 done for i in ${!arr[@]} do if