1樓:鈄運旺登子
二維陣列每行的首地址分別為a[0],a[1]……a[i],*(a+0)是a[0],*(a+1)是a[1]……*(a+i)是a[i]。a+i是地址,但不代表第i行的首地址a[i]。
2樓:匿名使用者
a+i和*(a+i)的值相同沒錯,但它們的型別不一樣,代表的意義也不一樣。a+i還是2維指標,*(a+i)則是一維指標。編譯器對它們的解析和操作是不一樣的。
指標指向二維陣列,a+i表第i行首地址,為什麼加了個取內容符的*(a+i)還表示第i行首地址
3樓:匿名使用者
書上有解釋啊。對於一位陣列a來說,a[i]和*(a+i)等價,因此對於二維陣列內b來說,b[i]和*(b+i)等容價,但他們的值都是&b[i][o]。也就是說,二維陣列的指標某些表達是從一維陣列演變來的。
別忘了二維陣列是可以看作一個元素為陣列的一維陣列。望採納
4樓:太原綁哥
二維陣列每行的首地址分別為a[0],a[1]……a[i],*(a+0)是a[0],*(a+1)是a[1]……*(a+i)是a[i]。a+i是地址,但不代表第i行的首地址a[i]。
定義 int a[2][2]的二維陣列,a+i表示第i行首地址,*(a+i)表示第i行第0列元素地址,我瞬間就懵逼了
5樓:君上沙夏
a+i表示第i行首地址,*(a+i)表示第i行第0列元素這樣說才是對的。
第i行首地址和第i行di0列元素地址是一個意思。不明白可以追問
二維陣列中*(a+i)是什麼意思
6樓:匿名使用者
在c語言中規定,陣列名代表的是陣列首元素地址。a是二維陣列的陣列名,因此,在二維陣列中*(a+i)表示的是第i+1行0列元素的地址,即a[i][0]的地址。而a+i表示的是第i+1行的首地址。
*(a+i)與a[i]是一樣的地址,為什麼?
7樓:匿名使用者
這麼說吧,*(a+i)與這個地址存的引數等效,*的意思是根據指標這個地址調出這個地址上的值。那麼,說是地址也沒有錯,只能說不是很嚴謹。
8樓:匿名使用者
你內個說法有點錯誤
c++二維陣列指標中
a+i 表示陣列a的第i行第0列元素的地址*(a+i)表示陣列a的第i行第0列元素的值估計你內個是書上印錯了,教科書各種錯,例題**也各種錯,你得自己根據定義去理解,它只是說個大概意思
9樓:匿名使用者
不是的,給*p賦值,並不是直接賦給它數值,而是賦給他一個地址,比如說:*p=&i,那麼就給*p賦給了i的記憶體地址,系統在讀取到記憶體地址之後再讀出該記憶體所存的數值,而*p的記憶體地址等於i的記憶體地址,所以*p的數值與i的數值是一樣的,雖然 在賦值語句之後,*p等價於i, 但是不能說直接把數值賦了*p。*p=&i的含義是變數i的地址作為一個資料存放在指標變數p所對應的記憶體單元中。
二維陣列中,二維陣列第i行的首地址為:a[i],*(a+i)。請詳細說明一下這兩個怎麼來的。看不懂。大俠門多謝
10樓:匿名使用者
a[i] 與 *(a+i) 的作用一樣
陣列是一片相鄰的記憶體地址
a是儲存陣列的首地址
*(a+i) 就是地址的操作
a[i] 就是用 operator 把上面那個定義成符號
11樓:目標月薪
例如:int a [ i ] [ j ];
a[i] 等於&a[i][0]
*(a+i) 等於&*(*(a+i)+0)
c語言中二維陣列*(a+i)的意義
12樓:
*(a+i)——二維陣列第i行(從0起算)第一個元素的地址。
13樓:匿名使用者
所謂*(a+i)等價於a[i],而a[i]是一個陣列名,那麼a[i] = &a[i][0],陣列名等與首元素的地址
*(*(a+i)+j)是不是表示第i+1行第j+1列個元素的值?
14樓:匿名使用者
反過來思考一下:
如果 *(a+i) 是第i行的行首元素,那麼第i行的第二個元素應該怎麼表示呢?
a+i 和 *(a+i)雖然值相等,但是他們的意義是不同的a+i 是陣列指標的指標,p=a+i;p++;跳過一行*(a+i)是指標,p=*(a+i);p++;跳過一列
15樓:匿名使用者
假設int a[3]=,b;
b=*(*(a+1)+1);
a是個二維陣列,表示二維陣列a的地址,a[0]、a[1]可看作是2個一維陣列,分別是一維陣列a[0]、a[1]的地址,a[0]的值為,a[1]的值為,也就是a[0][0]的值為1,a[1][0]的值為4,依此類推
a+1是個地址,是二維陣列a的第二個元素的地址,也就是a[1]的地址
*(a+1)是個值,但也是個地址,其值就是二維陣列a的第二個元素的值,也就是a[1]的值,a[1]是個地址,也就是一維陣列a[1]的地址
因此a+1和*(a+1)其實都是a[1]的地址值,前者是二維陣列的地址,後者是二維陣列的值,也即一維陣列的地址
*(a+1)+1也就是a[1]+1,即一維陣列a[1]的第二個元素,即a[1][1]的地址
*(*(a+1)+1)就是a[1][1]的值,也就是5
a、a[0]、*a都是a[0]的地址,a+1、a[1]、*(a+1)都是a[1]的地址,可用以下語句驗證
printf("%d,%d,%d",a,a[0],*a);
printf("%d,%d,%d",a+1,a[1],*(a+1));
為什麼c語言中*(a+i)+j能表示a[i][j]的地址
16樓:
int a[3][4]; //假設定義一個3行4列的二維陣列,所謂二維陣列就是陣列的陣列
a[0]、a[1]、a[2]是陣列a的元素,而這個元素是陣列,而不是我們通常認為的基本資料型別的資料
所以*(a+i)就是獲取陣列a中第i個元素,等價於a[i],而a[i]本身又是一個包含有4個int型數值的陣列,a[i]是這個一維陣列的陣列名,我們知道陣列名的本質是一個地址,是陣列首元素地址,所以
*(a+i)+j就是表示下表第i行的第j個元素的地址了。所以,
*(a+i)+j表示的含義是元素a[i][j]的地址,也可以用a[i]+j來表示。
17樓:聽不清啊
int a[2][3]=;
printf("%d ",*(*(a+1)+2));
以上的引用能夠輸出60
因為a是二維陣列名,所以它是指向指標的指標(二級指標)。
*(a+1)就是a[1],它是一個一維陣列,也是一維陣列的首地址(指向一維陣列首元素的指標)。*(a+1)+2就是a[1][2]的地址,*(*(a+1)+2)就是a[1][2]。
18樓:匿名使用者
*(a+0)取出a[0]的值
a[0]的元素又是一個一維陣列
因此*(a+0)取出的就是這個一維元素的首地址那麼*(a+0)+0表示: 一維陣列a[n]中, a+0陣列元素a[0]的地址
*(a+0)+1表示一維陣列的1號陣列元素的地址
C二維陣列的程式,一個 C 二維陣列的程式
陣列太大了,看看下面 一個由 c c 編譯的程式佔用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由 os 注意它與資料結構中的...
C語言程式設計中 二維陣列中元素指標的表示 的例題,求詳解
二維陣列和指標 用指標表示二維陣列元素。要用指標處理二維陣列,首先要解決從儲存的角度對二維陣列的認識問題。一個二維陣列在計算機中儲存時,是按行儲存的,即先儲存第一行的元素,再儲存第二行的元素。當把每一行看作一個整體,即作為一個大的陣列元素時,原來的二維陣列也就變成一個一維陣列了。而每個大陣列元素對應...
C語言中有什麼函式能求二維陣列的一維陣列的長度
你要了bai解二維陣列其實是 du模擬一維陣列zhi 的,因為計算機的儲存機制是一維dao的內.charstr 20 50 這樣其實是定義了20組容一維陣列,其中每組又含有50個char型變數的陣列.你用strlen str 是不行的.這是求一個字串有多少個字元的.應該用sizeof str 這樣就...