c語言的行指標與元素指標有什麼區別

2021-03-07 02:24:34 字數 6009 閱讀 6809

1樓:匿名使用者

先舉個例子吧,先定義乙個二維陣列int a[3][4]=,,}陣列名a就是乙個行指標,a[0]就是乙個列指標;

就拿這個例子說吧,a和a[0]雖然位址相同,可是指標指向型別卻不同,對指標進行+1運算,顯然得到的結果是不同的,因此a(行指標)+1中的"1」代表一行中全部元素所佔的位元組數,而a[0]+1,這裡的1則是乙個元素所佔的位元組數,是兩個不同的概念。

為了說明這個容易搞混的問題,可以用軍訓中排隊點名來說明。班長逐個檢查本班戰士是否在佇列中,班長每移動一步,走過乙個戰士,而排長點名只檢查本排各各班是否到齊。排長只從第0班的起始位置走到第1個班的起始位置,看來只走了一步,但實際上他跳過了10個戰士,這相當於a+1,班長面對的戰士,排長面對的是班,班長相當對列指標,排長相當於行指標。

為了找到某個班內的某乙個戰士,必須給出兩個引數

2樓:鍵盤雀躍

^int a[4]=

1 2 3 4

^ ^

a[0] a[1] a[2] a[3]a是一維陣列名,代表陣列的首位址.也就是a[0]*(a+1) 指標移動2個位元組,指向下乙個陣列元素,就是a[1]int a[3][4]=,,}

^ ^

*a[4] 或a[4] 或a[3][4] 都可以表示行指標.操作a是二維陣列名,代表二維陣列的首位址,也就是a[0][0] = 1

*(a+1)[4] 指標指向a[1][0] = 5 ,也就是指向下一行陣列元素的首位址.一次跳躍到下一行.

3樓:匿名使用者

行指標與元素指標的區別實質上就是指 【陣列】與【普通指標】的區別。

區別:1、指標的本質是乙個與位址相關的復合型別,它的值是資料存放的位置(位址);陣列的本質則是一系列的變數。

2、陣列名對應著(而不是指向)一塊記憶體,其位址與容量在生命期內保持不變,只有陣列的內容可以改變。指標可以隨時指向任意型別的記憶體塊,它的特徵是"可變",所以我們常用指標來操作動態記憶體。

3、當陣列作為函式的引數進行傳遞時,該陣列自動退化為同型別的指標。

4樓:匿名使用者

行指標是指向一行的,假設指標為p,那麼p++就向下移m*d(m為那一行的元素個數,d每個元素佔的記憶體單元)

指向元素的指標 p,那麼p++就是指向下乙個元素

也就是說p移動的位元組不一樣

c 語言指標的指標和二維陣列的區別?

5樓:文帝寶寶

指標的指標和二維陣列完全倆東西,二維陣列是 一維陣列的一維陣列,元素是陣列,所以可以隱式轉化為int (*)[3],跟int **兩回事,擴充套件到更多維或其它型別也是成立的,只能隱式轉化為第一維的元素的指標

補充說明下隱式轉化為指標,簡單說就是這樣(t是任意型別)

設有乙個陣列t a[10];

a的型別是「t [10]」,在做大多數運算的時候,都先隱式轉化為「t *」型別,即t的指標

對於多維陣列,可以看做是乙個一維陣列,陣列的元素型別就是第二維開始的陣列型別,比如:

t a[10][20][30];

是乙個有10個型別為「t [20][30]」元素的陣列,用**解釋更清晰:

typedef t u[20][30];

u a[10];

跟上面的定義等價,所以a只能隱式轉化為「u *」,「u *」後也就是「t (*)[20][30]」這個型別了,跟多級指標沒關係,因此,多維陣列不存在到多級指標的轉化規則,強轉只會導致問題

6樓:育知同創教育

二維陣列由若干個一維陣列組成在c語言中定義的二維陣列實際上是乙個一維陣列,這個一維陣列的每乙個成員又是乙個一維陣列。

當變數作為函式的引數時,函式內修改的是形參,實參不變化;(swap(int a, int b))

當指標作為函式的引數時,函式內:若修改指標變數,實參指標指向變數不變。若修改指標指向,實參指標指向的變數變化。(swap(int *a, int *b))

c語言中的列指標是指向元素的指標嗎,怎麼區別行指標與列指標

7樓:村驢

二維陣列的陣列名a和a+1、a+2是行指標,它指向的元素是乙個包含4個元素的一維陣列,而*a、*(a+1)、*(a+2)是列指標,即指向元素的指標,相當於一維陣列中指向特定元素的指標。*(*(a+1)+2)是先豎著走一行,再橫著走兩行,相當於a[1][2]。&a[1][0]就是a[1][0]的位址,相當於*(a+1),是乙個列指標。

8樓:這個名有人取了

這個三言兩語說不太清楚,推薦你看看這篇部落格

望採納

c語言中,指標陣列和行指標的區別是什麼?

9樓:藏天地

int(*p)[4],這個就是行指標

這種型別的指標p是指向乙個一維陣列,這個一維陣列包含4個整形元素

但是 int a[4];p=a; 這種方式卻是不對的

因為p只能指向乙個整型的一維陣列,不能指向乙個整型資料,a所指向的正是a[0],是個整型數;

實際上int(*p)[4]這種型別的指標是用於多維陣列中的,比如定義乙個二維陣列int b[3][4],就可以這樣賦值p=&b[0],使p指向一維陣列b[0],而且p的增減是以一維陣列的長度為單位的,比如p+1指向的就是b[1]了

int *p[4]這個是指標陣列了,首先弄明白這個是陣列,裡面存放的是指標也就是位址,這個位址所指向的是乙個整型資料,你可以把p[0],p[1]....當作乙個個的指標變數來使用

我學的時候也弄了半天才搞明白,這是我總結的,你多看看指標那關於多維陣列與指標的一節,做些練習自己驗證幾次就容易弄明白了

10樓:匿名使用者

簡單的說就是乙個是指向陣列的指標,乙個是陣列成員是一族指標

具體哪個是哪個我也時常分不清楚。但用起來就知道了

c語言中的「行指標」與「元素指標」有什麼區別?

11樓:鍵盤雀躍

int a[4]=

1 2 3 4

^ ^

a[0] a[1] a[2] a[3]a是一維陣列名,代表陣列的首位址.也就是a[0]*(a+1) 指標移動2個位元組,指向下乙個陣列元素,就是a[1]int a[3][4]=,,}

^ ^

*a[4] 或a[4] 或a[3][4] 都可以表示行指標.操作a是二維陣列名,代表二維陣列的首位址,也就是a[0][0] = 1

*(a+1)[4] 指標指向a[1][0] = 5 ,也就是指向下一行陣列元素的首位址.一次跳躍到下一行.

c語言中「指標」和「指標變數」的區別是什麼??

12樓:大野瘦子

1、概念不同

「指標」是概念,「指標變數」是具體實現,指標也是乙個變數,所以需要進行定義,而對於指標的定義,與一般變數一樣。

2、 存放位址不同

乙個變數的(記憶體)位址稱為該變數的「指標」,通過指標能找到以它為位址的記憶體單元。而指標變數是用來存放另乙個變數的位址的(即指標)。

指標和指標變數的關係

1、指標就是位址,位址就是指標。

2、位址就是記憶體單元的編號。

3、指標變數就是存放記憶體位址的變數。

4、指標和指標變數是兩個不同的概念,但要注意的是,通常我們敘述時會把指標變數簡稱為指標,實際他們含義並不一樣。

注:指標裡存的是100. 指標:位址 - 具體。

指標裡存的是位址,指標:指標變數 -可變。

指標的好處:

1、直接訪問硬體

2、快速傳遞資料(指標表示位址)

3、返回乙個以上的值返回乙個(陣列或者結構體的指標)4、表示複雜的資料結構(結構體)

5、方便處理字串

6、指標有助於理解物件導向

13樓:蓋辜苟

用例子來看一下。

int a=3;

int *p;

p=&a;

現在來看一下。a=3這個式子先解釋一下

等式右邊是常量,左邊是變數。

同理的p=&a,左邊的是指標變數,右邊的是指標

指標的基本概念:為了區別記憶體的不同位置,記憶體被分成位元組,記憶體的全部位元組順序地賦予乙個稱為位址的編號。程式中的變數將在記憶體中佔據一定的記憶體位元組,在這些位元組中儲存的資料資訊稱為變數的內容。

乙個變數占用連續的若干個記憶體位元組時,最前面的乙個位元組的位址就作為該變數的位址。指標就是記憶體位址,是變數的位址,或函式的入口位址。變數的位址在程式執行時,起著非常重要的作用。

當計算機在計算含有變數的表示式時,計算機按變數的位址取出其內容,並按變數的位址將計算結果存入到變數佔據的記憶體中。

如**:  int x=l;  x=x+2;  其中語句「x=x+2;」中的第乙個x涉及到變數x佔據的記憶體,第二個 x是引用變數 x的內容。該語句的意義是「取x的內容,完成加上2的計算,並將計算結果存入變數x佔據的記憶體中。

」指標變數和它所指向的變數:在c語言中,位址也作為一種值,能被儲存、比較、賦值,並稱位址資料為指標型別,而稱儲存位址值的變數為指標變數,簡稱指標。c程式可用運算子&取變數的位址,如表示式&x的值就是變數x的位址。

程式除能按名引用變數外,也可利用變數的位址引用變數。按變數名引用變數稱為直接引用,而將變數a的位址存於另一變數b中,借助於變數b引用變數a稱為對a的間接引用。

定義指標變數的一般形式為:  型別 * 指標變數名;  或  型別 * 指標變數名=初值表示式;  其中,指標變數名是識別符號,指標變數名之前的符號「*」,表示該變數是指標型別的。而最前面的「型別」,表示該指標變數能指向變數或函式的型別。

初值表示式是乙個位址表示式,如表示式中有某變數的位址表示式,則這個變數應是前面已定義的。

在c語言中,當定義區域性指標變數時,如未給它指定初值,則其值是不確定的。程式在使用它們時,應首先給它們賦值。誤用其值不確定的指標變數間接引用其它變數,會引起意想不到的錯誤。

為明確表示指標變數不指向任何變數,在c語言中用0值表示這種情況,記為null。

如  ip= null;  也稱指標值為0的指標變數為空指標。對於靜態的指標變數,如在定義時未給它指定初值,系統自動給它指定初值0。

指標變數取程式物件的(開始)位址值,不能將乙個整型量或任何其它非位址值賦給乙個指標變數。另外,指標變數對所指向的物件也有型別限制,不能將乙個不能指向的物件的位址賦給指標變數。

如有以下定義:  int i=100,j,*ip,*intpt;  float f,*fp;  以下**如注釋所敘。  ip=&i;/*使ip指向i*/  intpt=ip;/*使intpt指向ip所指變數*/  fp= &f;/*使fp指向正*/  ip=null;/*使 ip不再指向任何變數*/

在電腦科學中,指標(pointer)是程式語言中的乙個物件,利用位址,它的值直接指向(points to)存在電腦儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。因此,將位址形象化的稱為"指標"。

意思是通過它能找到以它為位址的記憶體單元。 在高階語言中,指標有效地取代了在低階語言,如組合語言與機器碼,直接使用通用暫存器的地方,但它可能只適用於合法位址之中。指標參考了儲存器中某個位址,通過被稱為反參考指標的動作,可以取出在那個位址中儲存的值。

作個比喻,假設將電腦儲存器當成一本書,一張內容記錄了某個頁碼加上行號的便利貼,可以被當成是乙個指向特定頁面的指標;根據便利貼上面的頁碼與行號,翻到那個頁面,把那個頁面的那一行文字讀出來,就相當於是對這個指標進行反參考的動作。

指標是程式語言的乙個重要概念。指標在c程式中有以下多方面的作用:

利用指標能間接引用它所指的物件。

利用各種型別的指標形式引數,能使函式增加描述能力。

指標與陣列結合,使引用陣列元素的形式更加多樣、訪問陣列元素的手段更加靈活。

指標能用來描述資料和資料之間的關係,以便構造複雜的資料結構。當乙個資料a要關聯另乙個資料b時,在資料a中增加乙個指向資料b的指標就可實現資料a關聯資料b。結合系統提供的動態分配儲存設施,又能構造出各種動態資料結構。

C語言指標問題,行指標的賦值與取值

1.p a 1可以。表示p指向陣列a的第1行。2.p a表示p指向陣列a的第0行。3.p a.則 p是陣列a的首地址,這個地址型別是int 4.可以定義成 p 4 但不能p a。因為它們型別不一致。5 p的值與型別與a 0 相等。 菜刀剁菜鳥 1.正確 2.p a是表示p指向陣列a的第0行 p指a ...

C語言指標的意義在C語言中什麼是指標?指標是幹什麼用的?,有什麼意義?

如果使用變數傳遞,因為自定義函式沒有返回值,所以len的值不會改變。而使用指標,則自定義函式直接操作len,即使沒有返回值,len的值已經改變。如果使用變數傳遞也可以實現,就是需要返回len的值。指標就是指變數的位址 mul arr,i,len 你這個函式的實參取的len的位址,所以你定義函式時的形...

c語言指標的作用有哪些C語言指標的作用有哪些?

指標的用途非常廣泛,比如如果你想通過函式改變乙個變數的值,就得用指標而不能用值傳遞。還有在很多時候變數,特別是物件的資料量實在太大,程式設計師就會用指標來做形參,只需要傳遞乙個位址就行,大大提高了效率。簡單地說指標就是指向變數和物件的位址。基本說明 1 在計算機中,所有的資料都是存放在儲存器中的。一...