C語言什麼叫行指標?它與陣列指標有什麼聯絡和不同點

2021-03-19 18:19:19 字數 5632 閱讀 1869

1樓:血殿下

陣列指標就是一個陣列的地址, 行指標出現在二維陣列裡就是是二級指標那裡附近,例如 int a[10][5]; 那麼二維陣列可以可分為行和列,那麼要找到每一個陣列就要通過哪行和哪列查詢,a[10][10]中第一個小標表示行,第二個下標表示列,那麼 a[1],a[2]表示對應行的指標,記得在二維陣列中約定a[1],a[2]表示的是指標,在一維陣列中a[1],a[2]表示的是元素,我知道你雲裡霧裡的這裡比較難記住既可以了,不要問為什麼,記得這是語法規定的就可以了

2樓:手機使用者

行指標是一種形象的說法,比如現在有x行x列的**。p指標指向第一行,行指標特點就是比如p+1,那麼p就指向下一行的首地址。普通指標+1 就指向下一個,注意是下一個地址。

行指標是指向下一行。

c語言中陣列和指標的區別與聯絡

3樓:匿名使用者

陣列和指標是兩個概念

陣列是數的集合

而指標是一個地址。就好比我給你一個地址,你要上門去看看才知道到底住了什麼人

聯絡的話,陣列可以用指標來指向。

4樓:荀泰捷仙

陣列是用指標方式實現的,但陣列值是一個常量,即不能改變陣列的首地址,而指標是一個變數,可以改變它的值;如:陣列 a和指標p,p=a+1;是合法的,但a=a+1;是不合法的。

5樓:巴楚柴德惠

陣列是資料的順序儲存格式,指標是變數的記憶體地址。陣列變數名是陣列開頭的地址。

6樓:毛教烏孫之卉

陣列名就是一種指標,我們常說的指標是對地址的引用,而陣列實際指向的也是地址,所以陣列也是一種指標。指標不一定是陣列,因為指標可以指向所有地址

7樓:籍水鄒建章

好像有一點類似,陣列名和指標都是儲存的是地址! 可能是陣列中應用到了指標。

8樓:荊姣蹉祺福

陣列一旦編譯過,陣列名就是該陣列的首地址(即指標),但該值不能改變,如int a[10]=;

那麼a就是該陣列在儲存中的首地址,不能對a進行算術等運算,而

指標變數

就可以。

9樓:勞幹邴映波

其實陣列名本質上來說就是一個指標,只是是一個常指標,不能改變指向的

10樓:毓城督欣暢

陣列是在編繹時就已經分配好相應的記憶體空間了,指標可以在程式執行時新分配或重分配記憶體,陣列可以看成指標,但指標不能理解為陣列

11樓:聶雅戴憶之

兩個不是同一個東西 指標是記憶體地址

12樓:種賦奚永昌

不同概念,可以當同一個東西來用

13樓:天彬司馬夏嵐

陣列的名字就是首地址。。。如果一個陣列int a[5],那麼你可以int* a或者int a

c語言中:陣列指標與指標陣列有什麼區別?

14樓:匿名使用者

陣列指標是指向這個陣列首地址的指標,指向物件是這個陣列;

指標陣列是存放一類指標的陣列,這個陣列的每個元素都是一個指標;

例子:int a[10];

int* s;

s = a;//這裡s就是一個陣列指標,它的值就是陣列a 的首地址;當然,如果a是一個整數,那s就是一個指向整型的指標;

int a;

int* s[5];

for(int i=0;i<5;i++)s[i]=a;

//這裡s就是一個指標陣列,它的每個元素都是整型變數a的地址應該算比較明白了吧

謝樓上提醒

15樓:天雲一號

int (*p)[4]; // 定義一個陣列指標,指向含4個元素的一維陣列,陣列元素是int型別。

int *p[4]; // 定義一個指標陣列,陣列中每個元素是一個指標,指標指向**就要根據程式來定了。

判斷陣列指標與指標陣列主要通過運算子的優先順序來判斷。

int (*p)[4]; // 由於( )的優先順序高,說明p是一個指標,指向一個一維陣列的指標

int *p[4]; // 由於[ ]的優先順序高,先與p結合成為一個陣列,再由int*說明這是一個整型指標陣列

16樓:匿名使用者

1.大概說一下這三種

int * a;            這叫整型指標   這玩意兒不能指向陣列,搞清楚指向的是陣列首元素

int (* b);       這叫整型陣列指標     意思是指向陣列的指標

int * c[5]=null;          這叫整型指標陣列     意思是儲存指標的陣列

下來舉個例子,理解一下:

2.定義一個陣列,下面舉例解釋

int i[5]=;        //定義整型陣列,五元素皆為0

int n[5][5]=;            //定義二維陣列

3.三種分別舉例

(a的例子)

a=i;         //這裡i是陣列名,i相當於&i[0]。陣列名相當於是陣列i的首地址。此時* a指向陣列i首元素。

a++;然後輸出就是i[1]的值

(b的例子)

b=n;        //二維陣列名相當於n[5]這個陣列,注意這塊兒,這塊兒最難搞清楚。n代表的不是第一行第一個元素的地址,而是代表第一行元素的所有地址的陣列。這塊的指標陣列b相當於存放了n陣列第一行的所有元素的地址。

//這塊的陣列指標b和上面的指標a比較,a指向的是陣列的首元素,而b指向的是整個陣列(或者說是存放了整個一維陣列的多個元素(二維陣列由一維陣列構成,二維陣列的第一行即是一個一位陣列))

然後我們輸出(* b)[2]相當於輸出了n[0][2]

如果b++然後輸出(* b)[2]相當於輸出了n[1][2]

c的玩法:

太簡單了,不想說了。就是存放多個指標的陣列,自己想想。

17樓:匿名使用者

摟主先要明確每個詞的後面一個名詞代表其所要定義的型別陣列指標就是指向一個陣列首地址的指標(aa);

舉例:char a="hello world";

char *aa;

aa=a;

指標陣列就是一個陣列,這個陣列的元素是指標;

舉例:char a='t';

char *aa[2];

a[0]=a;

a[1]=a;

附:感覺樓上的這段舉例有點問題

int a[10];

int* s;

s = &a;

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

18樓:匿名使用者

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

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

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

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

19樓:鍵盤雀躍

^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 ,也就是指向下一行陣列元素的首地址.一次跳躍到下一行.

20樓:匿名使用者

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

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

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

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

21樓:匿名使用者

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

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

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

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

22樓:匿名使用者

陣列名確實表示指向陣列首地址的指標,但這個指標很特別,它的值(指標的值指的是指標所指的地址)不能被改寫,能改寫的僅僅是其指向的內容,換句話說,陣列名只能指向陣列的首地址,如果有陣列char a;那麼如果出現a = a+1;這是編譯都通不過的錯誤。而對於一個普通的指標是可以的,再比如有陣列char a;那麼再定義一個char *p = a;然後再用p = p+1是合法的,這表示讓指標p指向&a[1]。

它們的第二個區別是:每當用到陣列名這個指標的時候,系統都會傳入陣列的資訊,而普通的指標只是一個4位元組的整數,例如:

char a[5];

char *p = a;//指標a和指標p都指向陣列a的首地址cout << sizeof (a) << "##" << sizeof (p) << endl;

這時的執行結果是「5##4」

23樓:塞上孤獨

為什麼陣列名的那個指標不能運算,也就是你說的不能改寫,告訴你那是因為陣列一旦定義了,就放到常量區了,你試試看你能改變常量嗎?

c語言中陣列名和指標的區別

24樓:匿名使用者

陣列在當作引數傳遞時,可以當作指標;當然,引數傳遞相當於賦值操作,所以用指標來接受陣列的值也是可以的。

除此之外,指標就是指標,陣列就是陣列,一點也不一樣,例如1,陣列名不能作為左值,即不能被賦值,也不能進行++ --操作2,sizeof 陣列名 和 sizeof 指標 不同

25樓:

陣列名本質上就是個指標,也就是地址,但是它是一個常指標,是個固定值,而指標是是指標變數的簡稱,是個變數,這個變數存放的是地址值,它的值是可以改變的。例如:

int *p;

int a,b;

p=&a;  //把變數a的地址賦值給指標p,那麼指標p就指向了變數a的記憶體單元

p=&b;  //把變數b的地址賦值給指標p,那麼指標p就指向了變數b的記憶體單元

int a[10];  //整型陣列,陣列名a本質上是一個地址,是首元素地址,它是一個固定值,不能對它進行賦值操作。

c語言中陣列指標和結構體指標問題

樓上都說的很不錯。針對補充,我說兩句 結構體名字不是指標,結構體陣列的名字才是指標 就好像int x x不是指標,int x 2 x是常量指標 同樣 struct aa aa x x不是指標,aa x 3 x是常量指標 對於陣列int a 2 我們通常把a看成是指標 但實際上,這個指標並不存在的,a...

c 指標陣列問題,C 中關於指標陣列的問題。

是錯誤的。char cchar count 宣告瞭cchar是有count個元素的陣列,每個元素都是指向char型變數的指標。但cin cchar i 卻試圖給cchar的第二個元素 指標 賦一個鍵盤值 這裡指標還沒有確定指向,是隨機的,它隨機地指向了不能寫入的地方,就要出錯。這裡應該先給指標陣列賦...

C語言中字元陣列和字元指標

又問了一遍哈,我就知道這麼多了 前者是靜態的,也就是每次都要設定一個最大的max上限才能保證不會越界。後者是動態的,你可以用多少就申請多少,可以在任何時候擴大或減小 free 當資料很大時,就需要把不用的空間free,而直接開陣列不可以 另外如果在main內,陣列不能開很大,但是卻可以malloc一...