C語言中指標與陣列有什麼關係,C語言中,指標和陣列的區別和聯絡

2021-03-03 20:48:16 字數 4103 閱讀 6631

1樓:匿名使用者

c語言中陣列和引數可以通用,陣列有一個基址,c中用指標指向它,計算陣列元素地址的時候,是基址+元素位元組數*(元素序號-1)。

2樓:匿名使用者

陣列名bai代表陣列在記憶體du中的首地址。

指標可zhi以儲存一個地址dao,也即指向某地回址。

在c中,答

對於某地址的訪問有兩種方式:

1.直接訪問,如用變數名進行賦值等;

2.間接訪問,例如陣列q[i]。

基於上述兩種形式,c語言標準規定,指標可以模擬陣列的行為。so,你的問題得解。

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

3樓:匿名使用者

區別:c語言把記憶體劃分成四個區,它把一般的變數和陣列等存在於記憶體中的棧區,所以陣列在c語言的定義中只是一組同型別的普通變數,即使這個變數有可能是指標。所以他的作用比指標小的很多,而指標可以指向任何區的任何資料,所以就會覺得指標和陣列名很像,但是必須要注意的是,陣列名只是指標中的一種,它是指標中只指向棧區的且指標的移動範圍是有限的,即陣列長度。

而且陣列在定義之初就已經有了自己的記憶體,一般的指標如果未指向某一個記憶體塊時,它是沒有自己的記憶體的,即所謂的野指標。

聯絡:如上面所說,陣列只是定義在棧區的一個連續變數,它的首地址就是一個指標。

總結:不僅陣列有指標,所有變數都有指標,指標說白了就是記憶體中的地址,就像一個房間必須有一個房間號。在c/c++語言中定義一個指標,就是在棧區開闢一個記憶體空間用來存放它指向的記憶體地址,然後給指標賦值,就是把地址值賦值給剛才開闢的記憶體空間,然後通過訪問該記憶體中的地址值來間接訪問該地址下存放的資料。

如果該地址值指向的是一塊靜態儲存區,如字串常量等,當然就不可以修改指向的內容啦。

經驗之談,樓樓加分啊

4樓:匿名使用者

指標就是一個裝地址的變數,陣列是記憶體中的一個區域,而陣列名是這個區域的首地址。也就是說你在定義指標的時候編譯器只分配了一個變數的空間(空間大小由記憶體地址長度決定),而定義陣列的時候編譯器分配了一段區域的空間(空間大小由[ ]裡面的數字和陣列的型別決定)。使用上你可以把一個地址賦值給指標,但是不能賦值給陣列名。

你可以直接給陣列裡面的變數賦值,這是安全的,因為記憶體已經申請好了,而給指標裡面裝個那個地址賦值就要小心了,因為指標裡面那個地址很可能會出錯。

5樓:匿名使用者

陣列 eg: a[10] 這個陣列名a就是一個指標,

那如果是在動態記憶體中建立一個陣列的話,是沒有陣列名可以被使用的,必須用指標(解引用)間接來呼叫,所以陣列和指標是分不開的

6樓:不再猶豫

一維陣列名可以看做一個儲存陣列首地址的常量,不可變。而指標是個儲存地址變數,可根據需要指向不同元素;宣告一個陣列,就可以對陣列相應的儲存空間內的資料進行賦值,修改;指標則是宣告後,必須先對指標賦予地址,然後對所賦予地址中的資料進行賦值,修改(注意越界)

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

7樓:匿名使用者

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

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

例子: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的地址應該算比較明白了吧

謝樓上提醒

8樓:天雲一號

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

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

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

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

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

9樓:匿名使用者

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的玩法:

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

10樓:匿名使用者

摟主先要明確每個詞的後面一個名詞代表其所要定義的型別陣列指標就是指向一個陣列首地址的指標(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語言中的指標陣列和陣列指標的區別

11樓:黑丶雨

指標陣列:陣列裡的每一個元素都是指標如*p[10],裡面的 p[0] 到 p[9] 都是指標;

可參考:http://baike.

陣列指標:指向一個陣列的指標,如 arr[10] 是一個陣列, 讓一個指標指向這個陣列 p = arr;

訪問時通過 *(p + n) 或 p[n] 訪問元素值,n為元素索引值;

可參考:http://baike.

12樓:育知同創教育

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

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

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

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

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

C語言中,指標變數該如何使用呢,C語言中指標和指標變數的區別是什麼

int integer 0 為求來 地址運算子,指標用來儲存 源一些變數的bai地址 可以這樣訪du問 pinteger 得到 pinteger這個整形指標裡面的值 zhi0 建議看dao 相關的書,難懂的東西才有意義 所謂指標其實就是用來儲存地址的 就這樣想就好了 比如 int a,p p a 就...

c語言中,指標變數為何只佔節c語言中,指標變數為何只佔4位元組?

首先要明白的是,指標變數是用來存地址的變數,也就是說,這個變數裡面存的內容是地址。那麼開始解釋,cpu與記憶體進行直接互動時,cpu要獲得記憶體中的資料,就要知道這個資料在記憶體中所在的地址,那麼cpu就要在記憶體中定址。記憶體中的地址的基本單位為位元組,即一個位元組一個地址,32位cpu有32根地...

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

int p 4 這個就是行指標 這種型別的指標p是指向一個一維陣列,這個一維陣列包含4個整形元素 但是 int a 4 p a 這種方式卻是不對的 因為p只能指向一個整型的一維陣列,不能指向一個整型資料,a所指向的正是a 0 是個整型數 實際上int p 4 這種型別的指標是用於多維陣列中的,比如定...