使用行指標和列指標輸出二維陣列元素

時間 2023-02-13 12:00:08

1樓:匿名使用者

首先說明一下什麼是列指標。

在c語言中,陣列是不同於普通變數的,實際上c定義的陣列是指向該陣列第一個元素的指標。這是第一個概念,即陣列名就是指標,所以可以直接當做指標來用,例如:對於一個陣列a,要取其第三個元素的值,既可以用a[2],也可以用a+2來訪問。

對於一個二維陣列,如果用下標變數來表示的話,則可以理解為:第一個下標變數指向該變數對應的行,第二個下標變數指向行內對應的一個元素。如下所示,第i行: a[i][0] a[i][1] a[i][2] .a[i][j]

如果將首行視為一個特殊的元素,這個「特殊的」元素是一個一維陣列。那麼二維陣列a[m][n]是由m個「特殊的」元素組成的一個「特殊的」一維陣列。

a是這個「特殊的」一維陣列的名稱,是首地址,也是第一個元素的地址,也是第一行的首地址,是指首行一整行,並不是指某個具體元素。那麼我們稱之為「行指標」。同理:

a+0,a+1,a+2,都是行指標。

接下來,我們放大來**首行,首行的元素分別是:a[0][0], a[0][1], a[0][2],.a[0][n]。

將其看作一個獨立的一維陣列,那麼a[0]就是這個陣列的名稱,也就是這個陣列的首地址,也就是第一個元素的地址,也就是a[0]+和a[0]+0都是指具體的元素,那麼我們稱之為「列指標」。

總結一下:行指標指的是一整行,不指向具體元素;列指標指的是一行中某個具體元素。

既然是指標,當然就會遵照指標的一些操作規則,總結下來,行指標與列指標之間的轉換關係為:

*行指標 ——列指標。

&列指標 ——行指標。

下面言歸正傳,給出一個用列指標輸出二維陣列的例子:

#include

void main()

;int *p= a[0]; 列指標的定義法。

for(; p < a[0] +12; p++)

return;}

二維陣列a的「列指標」與「行指標」有什麼關係?

2樓:king離歌無言

1.行指標與列指標區別是否是+1上的不同,例如a[0]+1是指a[0][1]的地址。

而&a[0]+1是指a[1][0]的地址!除了上面還有其他的行指標與列指標表示方法嗎?只要有其功能就可!

——本質上不存在任何區別,n維陣列的儲存空間都是連續的,只不靜態宣告陣列時,編譯器幫你生成了根據下表訪問特定元素的**,如a[3][3],使用a[1][2]則編譯器幫你生成*(a+(3*1)+2)的指標訪問**,所以對於二維陣列,設n,m分別為其。

一、二維,行指標:a+(n*行數),列指標:a+列數,在該位置的元素:a+(n*行數)+列數,不過用這種思維來理解陣列欠妥,特別是維數多的時候。

2.**a,*a[0]是否別代表a[0][0]這個元素,是否就代表a可以當作指標,還是有其他的。

區別!能講一點也好?

——不代表,a本身就是指標,而且是個值不能改變的指標,除非陣列的元素是指標或多階指標。

3.正如上面所說,a,a[0],&a[0][0]是指同一個地址,除了上述+1區別,還有麼?(可以從用法或其他方面說)

——轉變思維方法,陣列是線性儲存,就線性地去理解它。

4.陣列a[3][3],為何這個不可以for(i=0;i<9;i++)

scanf("%d",a++)

而 for(i=0;i<9;i++)

scanf("%d",a+i);可以呢?

區別在哪?——a是個不能改變值得指標,所以a++肯定是錯的。

c語言,指標,分別用行指標變數和列指標變數輸入和輸出二維陣列,行指標變數和列指標變數?我這對嗎

3樓:天天向上知識店鋪

可以的。

在c語言中,二維陣列在表示時可以有很多方法的:

如:a[i][j]可以表示為:*(a[i]+j)、*a+i)+j)、(a+i))[j]

定義一個二維陣列並初始化,分別用列指標和行指標輸出二維陣列任一行任一列元素的值

4樓:你猜我猜哇擦猜

這個是指標與陣列結合的問題,你要弄明白得看這方面的內容。你**中的p指標被定義為行指標,它是一個二級指標地址,它指向陣列首地址的方式只有p=a;這一種,若是定義為int *p;則p指標被定義為列指標,是一個一級指標地址,它指向陣列首地址的方式有:p=*a; p=a[0]; p=&a[0][0]; 因為不同指標指向陣列首地址的方式的不同,就使其對陣列中元素訪問的表達方式也就不一樣了。

用下標法,指標法,行指標,列指標四種方法,編寫程式,輸出一個二維陣列的元素。求解

5樓:

指標法其實就是行指標。

#include

using namespace std;

void output_subscript(int p[ ]4],int n);

void output_line(int p[ ]4],int n);

void output_column(int *p,int n);

int main(),cout<<"1)下標法進行二維陣列輸出"<

假設有一個二維陣列a[3][4],a就是首地址,他是一個指標是一個常量,指向第一個元素的地址,也就是指向第一行的首地址,是指首行一整行,並不是指某個具體元素。那麼我們稱之為「行指標」。同理:

a+0,a+1,a+2,都是行指標如下表所示。

但我們發現光有行指標是不能對列元素進行訪問的。所以我們再來看a[0],他也就是這個陣列的首地址,也就是第一個元素的地址,只不過指標方向是指向列的方向。也就是a[0]+0。

a[0]和a[0]+0都是指具體的元素,那麼我們稱之為「列指標」,如下表所示。

那麼兩個概念之間的具體轉換是:

*行指標---列指標。

&列指標---行指標。

對應關係如下表所示。

根據以上轉換公式:

對於元素a[1][2],其地址用列指標表示為a[1]+2,等價表示為*(a+1)+2,那麼內容是*(*a+1)+2);

二維陣列a的「列指標」與「行指標」有什麼聯絡

6樓:網友

沒有所謂的列指標與行指標。只有列下標與行下標,一級指標、二級指標。其實,二維陣列在記憶體中也是順序存放的。

從首地址開始,計算偏移就能遍歷整個陣列。a[i][j]中,列下標與行下標可以方便表示偏移而已。

7樓:網友

沒有「列指標」這個說法,程式中為了便於理解才用行和列來表示二維陣列,實際上資料是按順序存放的,也就是說物理上根本沒有行列的概念。

使用指標方式輸入及輸出二維陣列元素:要求定義一個3行4列的二維陣列(陣列內的值用scanf輸入)

二維陣列與指標,二維陣列a的“列指標”與“行指標”有什麼聯絡

伊旋圭蒙 int m 可以分步驟來理解 m意思是引用這個整型數,m代表指向這個整型數的指標,m代表指向 m的指標,也就是傳說中指向指標的指標 一般情況下形參為指標型別時,可以傳送陣列名作為實參,也即陣列的起始地址,二維陣列的可以看成是多個一維陣列組成的 用這種二維指標是不能操作這種二維陣列的,二維指...

指標二維陣列

用陣列指標來訪問 你有1個使用錯誤 訪問 ident num row num col 出界了應該 ident num row 1 num col 1 1個演算法錯誤 沒有根據行列值是否相等來判斷,相等才能賦值1.0而且每次迴圈p 有很多次 仔細看 會跳過很多元素,它們沒有賦值用i,j來定位行列很好做...

普通的指標變數可以指向二維陣列嗎

麥香甜甜圈 當然可以。因為二維陣列在記憶體中也是按照一維方式存放的 記憶體單元是一維的 下面有個參考程式你可以試試。include void main int p a printf d n p 結果輸出1,將 p改寫成 p 1 則輸出2,改寫成 p 7 則輸出8,可見 p可以指向二維陣列中的任何一個...