C語言中指標和陣列是怎樣相互轉換的

2021-03-04 03:11:35 字數 1493 閱讀 9434

1樓:匿名使用者

陣列名可以認為是常量指標, 本身值不能更改 ,但是可以參與運算。

指標可以當做陣列使用, 按照下標方式訪問。

以上僅限於一維指標和一維陣列

對於多維陣列, 可以轉為一維指標。

2樓:念玉蘭遲戊

指標陣列,就是一個陣列裡存放的都是指標,比如*p[8];p[0]裡存放的就是一個指標回

資料陣列指答針,陣列名就是一個指向陣列起始地址的指標,陣列下標是縈引,比如num[0],他就相當於num+0;

num這個指標沒移動,於是取的是陣列的第一個。num[1]相當於陣列指標移1,於是指向陣列第二個

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

3樓:匿名使用者

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

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

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

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

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

經驗之談,樓樓加分啊

4樓:匿名使用者

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

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

5樓:匿名使用者

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

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

6樓:不再猶豫

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

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

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

如何在c語言中以陣列指標作為形參輸出陣列

senddata 2 0,0和 0 都等於0,因此 info 0 會在k 2時不成立 建議 1.另外傳一個參數列示命令的長度 2 另外尋找一個一定不會在正常的命令中出現的數字作為結束符而不是正常命令中間就可能出現的0 另外有一個優化建議是吧info null的判斷提前做而不是和for攪在一起,因為i...

c語言中,指標問題,xa,xa,有什麼區別,x的值

語句形式一復 int a 10 int x a 這種寫法 表示將a的地制址儲存到x中去,這是定義指標,同時初始化操作的方法 x a 10 語句形式二 int a 10 int x 定義指標,不初始化 x a 這種寫法表示將a的地址儲存到x中去,x a 10 而此時,若寫成 x a 則程式會執行報錯 ...