當前位置:首頁 » 編程語言 » c語言數組行地址和列地址
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言數組行地址和列地址

發布時間: 2022-05-19 13:25:04

『壹』 c語言,二維數組str[3][4],那麼str[i]表示的到底是i行0列元素地址還是整個i行的地址

str[3][4表明,str是一個二維數組,共有3行,每行有4個元素。在C/C++中,二維數組元素是按行存放的,就是說,第二行的第一個元素排在第一行最後元素的後面,順序是:
str[0][0],str[0][1],str[0][2],str[0][3],str[1][[0],str[1[][1],str[1][2],str[1][3],str[2][0],str[2][1],str[2][2],str[2][3]
str[i]表示第i行的首地址,str[i] = &str[i][0],str[i] = &str[0][0] + 4 * i + 0。

『貳』 C語言二維數組地址問題

1、&a[0][0]為0行0列元素的首地址,a[0]+n為0行第n個元素地址,那麼a[0]是表示0行首元素地址嗎?

>>正確, a[0]就是0行首地址.

&a[0]是零行的首地址,實際上行的地址也只有一個,也無所謂0行的首地址吧?

>>&a[0]值上, 是和a[0]相同的, 不過類型不一樣. a[0]等效於int *型,實際上是指向一個元素. 而&a[0]是行指針, 指向一行.所以,a[0]+n和&a[0]+n是完全不同的.

+n相當於元素位移了n個位置嗎,所以代表第n個元素地址嗎?

>>+n取決於原始指針的類型. 如果是a[0]+n 移動的是n個元素.而&a[0]+n就是移動n行了.

然後*(a[n]+m)就表示n行第m個元素了?

>>這句沒錯. 任何情況下, *(p+n)都等效於p[n]
2、書中寫a+n表示第n行的首地址,那是相當於&a[n]嗎,a不是表示數組首個元素地址嗎,怎麼+n不是元素位置改變,卻是位移了行?

>>這個上面說過了, 核心在於指針的類型. 二維數組int a[M][N]的數組名a, 本質上是常量的int (*)[N]類型, 也就是數組指針. 移動的時候是整行移動的.

還是a+n表示n行首個元素的地址?為什麼

>>同上
*(a+n)與a[n]是等價的,原理是什麼,*(*(a+n)+m)怎麼也能表示n行m列元素呢?

>>*(a+n)與a[n]等價, 這個是C語言的一個規則. 其本質是, 當編譯器遇到a[n]這樣的形式時, 實際上是翻譯成*(a+n)進行編譯的. 這種可以用一個很少見的形式來驗證.你定義

int a[4]={1,2,3,4}; 然後輸出

printf("%d ", 3[a]);

對, 就是把數組名放進[], 實際上會輸出a[3]

『叄』 C語言數組地址問題

解釋如下:

&a,*a,a,a[0]——都表示的是數組第0行第0個元素的地址;

*a[0]——這個特殊,表示第0行第0個元素的地址的地址;

a[2],&a[2]——都表示第2行第0個元素的地址;

&a[2][2]——表示第2行第2個元素的地址;

詳見圖片,我已經把數組中主要元素的地址和值都列印出來了,數組中對應的每個元素的地址寫出來了,對照的找下對應元素的位置,應該能理解&a,*a,a,a[0],*a[0],a[2],&a[2],&a[2][2]是什麼意思了

#include<stdio.h>
#include<stdlib.h>

intmain()
{
inta[3][4]={
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
};

printf("&a十六進制地址是%p,十進制是%d ",&a,&a);//數組名,a[3][4]
printf("*a十六進制地址是%p,十進制是%d ",*a,*a);
printf("a十六進制地址是%p,十進制是%d ",a,a);
printf("a[0]十六進制地址是%p,十進制是%d ",a[0],a[0]);
printf("*a[0]十六進制地址是%p,十進制是%d ",*a[0],*a[0]);
printf("a[2]十六進制地址是%p,十進制是%d ",a[2],a[2]);
printf("&a[2]十六進制地址是%p,十進制是%d ",&a[2],&a[2]);
printf("&a[2][2]十六進制地址是%p,十進制是%d ",&a[2][2],&a[2][2]);

printf("數組a[3][4]首元素a[0][0]的地址是%p,首元素a[0][0]的值=:%d ",&a[0][0],a[0][0]);
printf("數組a[3][4]首元素a[2][0]的地址是%p,首元素a[2][0]的值=:%d ",&a[2][0],a[2][0]);
printf("數組a[3][4]首元素a[2][2]的地址是%p,首元素a[2][2]的值=:%d ",&a[2][2],a[2][2]);
printf("一個int整型變數占的位元組是:%d",sizeof(int));
return0;
}

『肆』 c語言數組、地址問題請高手解釋

定義了數組a,則機器在內存當中給數組a開辟一片內存存儲數組a,數組a的元素是順序存儲的,所以說數組a所在的地址就是數組a第一個元素所在的地址,這兩個指針(&a,&a[0])其實算是指向同一個地址的,所以列印出來的數值是相同的。

%p應該是64位32進制形式輸出,%d是十進制形式輸出的。&a[0]跟a其實是一回事,是相等的,所以第一行的第二個數,換算成十進制就跟第二行的第一個數是相等的。0x22FE30=2293296。

『伍』 C語言 我是初學者

行地址是說一行的首地址而不是說是行指針。
行地址和列地址的概念就是從把二維數組看成是一維數組的數組,數組每一個元素都是數組
行地址就是將每一行看成一個元素,那麼這個元素就可以用a[i]表示,就是第i個元素也就是第i行,
然後+j,就是,因為現在這個元素也是個數組,二a[i]表示的是一個數組的首地址,a[i]+j就是第j個元素。

至於a+i*h+j,就是講二維數組看成從左到右,從上到下順序排列,編譯器也是這樣存的數據。你要取i行j列的數據,
a//二維數組首地址
i*h//每曾一行數組元素就曾i*h個,也就是地址曾i*h,h是數組每一行的長度
j//i行的第j個

『陸』 C語言數組和地址問題

1、字元數組c在內存中佔用4個位元組,值分別為8,2,0,0

2、強制轉換後,整型指針p指向這個字元數組的起始位置(當前情形為值8所在的那個地址)

3、在小端格式下,p指向的整數被解釋為00000208。這個16進制值(208)對應10進制值520。

這里的16進製表示只是為了便於顯示,大家都知道實際上是以2進制存儲的,學東西要靈活一些。你最好用調試器自己看一下,這比別人講十遍都管用

『柒』 C語言中的二維數組里a+1和*(a+1)為什麼都是地址

二維數組又包含多個一維數組,a指向第一個一維數組的首地址就還是地址。

a+1應該是 (a+0)+1

這里的a是二維數組中的二級指針

數組名為a[0]的一維數組(表示行)

也是數組名為a的一維數組(表示列)

後面的1表示行數組移動1行

0表示列的移動

所以是1行0列的地址

*(a+1)中a是二級指針

取值二級指針是一級指針

一級指針指向的一維數組(二維數組中的行)

一維數組移動一位只能是向下移動也就是行

所以就是 第一行的首地址,也就等於二維數組中,第一行零列的地址。

(7)c語言數組行地址和列地址擴展閱讀:

二維數組A[m][n],這是一個m行,n列的二維數組。設a[p][q]為A的第一個元素,即二維數組的行下標從p到m+p,列下標從q到n+q,按「行優先順序」存儲時則元素a[i][j]的地址計算為:

LOC(a[i][j]) = LOC(a[p][q]) + ((i − p) * n + (j − q)) * t

按「列優先順序」存儲時,地址計算為:

LOC(a[i][j]) = LOC(a[p][q]) + ((j − q) * m + (i − p)) * t

存放該數組至少需要的單元數為(m-p+1) * (n-q+1) * t 個位元組 [1]

『捌』 C語言關於行地址和列地址的問題...剛才沒說清楚.請高手啊...

int a[4]的a的確是a[0]元素的地址,但是他也是一個行的地址,兩者並不矛盾,當int a[4],*b=a;定義是*a是a[0]的值,但是*a[4]意義就不同了,他是個指針數組,,,,,,,,,,,,,還要解釋好多,實在不懂找我

『玖』 c語言指針變數中行指針和列指針是什麼要如何使用

對於一個二維數組:
int a[3][5];

a即是它的行指針,a+0表示第0行的地址,a+1表示第1行地址…
a[row]+col即列指針,列指針經過一次解引用就可以轉化成二維數組中實際的值,列指針也是指向非常量的常量指針。

『拾』 c語言中二維數組哪個是行,哪個是列

1、二維數組的第一個參數是行,第二個參數是列。二維數組定義的一般形式是: 類型說明符 數組名[常量表達式1][常量表達式2],其中常量表達式1表示第一維下標的長度,常量表達式2 表示第二維下標的長度。

2、C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。C是高級語言:它把高級語言的基本結構和語句與低級語言的實用性結合起來。C 語言可以像匯編語言一樣對位、位元組和地址進行操作,而這三者是計算機最基本的工作單元。C語言一共只有40個關鍵字,9種控制語句,程序書寫形式自由,區分大小寫。把高級語言的基本結構和語句與低級語言的實用性結合起來。C 語言可以像匯編語言一樣對位、位元組和地址進行操作,而這三者是計算機最基本的工作。

3、在C語言中,二維數組是按行排列的。即,先存放a[0]行,再存放a[1]行,最後存放a[2]行。每行中有四個元素也是依次存放。由於數組a說明為int類型,該類型占兩個位元組的內存空間,所以每個元素均佔有兩個位元組。

4、二維數組在概念上是二維的,即是說其下標在兩個方向上變化,下標變數在數組中的位置也處於一個平面之中,而不是象一維數組只是一個向量。但是,實際的硬體存儲器卻是連續編址的,也就是說存儲器單元是按一維線性排列的。如何在一維存儲器中存放二維數組,可有兩種方式:一種是按行排列, 即放完一行之後順次放入第二行。另一種是按列排列, 即放完一列之後再順次放入第二列。

5、二維數組本質上是以數組作為數組元素的數組,即"數組的數組",類型說明符 數組名[常量表達式][常量表達式]。二維數組又稱為矩陣,行列數相等的矩陣稱變方陣。對稱矩陣a[i][j] = a[j][i],對角矩陣:n階方陣主對角線外都是零元素。

6、二維數組A[m][n],這是一個m行,n列的二維數組。設a[p][q]為A的第一個元素,即二維數組的行下標從p到m+p,列下標從q到n+q,按"行優先順序"存儲時則元素a[i][j]的地址計算為:LOC(a[i][j]) = LOC(a[p][q]) + ((i − p) * n + (j − q)) * t 。按"列優先順序"存儲時,地址計算為:LOC(a[i][j]) = LOC(a[p][q]) + ((j − q) * m + (i − p)) * t 。存放該數組至少需要的單元數為(m-p+1) * (n-q+1) * t 個位元組。