C語言中指標和陣列分析 上

2021-08-19 14:17:00 字數 2084 閱讀 5417

--事物的難度遠遠低於對事物的恐懼!

這章我們來分析下指標和陣列,在前兩章我們談了陣列和指標,我們知道:

陣列的本質:

-陣列是一段連續的記憶體空間

-陣列的空間大小為sizeof(array_type) *

array_size

-陣列名可看做指向陣列第乙個元素的常量指標

那麼我們來看乙個問題:對於乙個陣列 int array,array + 1是什麼?這個運算的意義代表什麼?

下邊以**來展示一下

#include int main()

;    int i=0;

for(i=0; i<5; i++)

printf("**************\n");

printf("array + 1 = 0x%p\n*(array + 1) = %d\n", array + 1, *(array + 1));

return 0;

}

編譯執行的結果如下:

從輸出結果來看,我們可以知道array + 1 == &array[1]*(array + 1) == array[1]。

為了弄清楚上邊的兩個等式,我們首先來了解下指標的運算:

-c語言中的指標是一種特殊的變數,它與整數的運算規則為: 

p+n->(unsigned int)p + n*sizeo(*p)

-同理可引申出:p + i將指向當前元素之後的第i個元素;p - 將指向當前元素之前的第i個元素

所以對於以上**中的array + 1,array是陣列首元素的位址,那麼 array + 1則指向了陣列首元素的下乙個元素,就是array[1],所以就有了array + 1 == &array[1],*(

array + 1) == array[1],同理可以推導:array + i == &array[i],*(

array + i) == array[i](i為陣列下標)

上邊我們只說了指標與整數之間的運算,那麼指標和指標之間可不可以進行運算?在c語言中

-指標與指標之間只支援減法運算

-參與減法運算的指標型別必須相同

p1 - p2 -> ((unsigned int)p1-(unsigned int)p2) /sizeof(type)

其中需要注意的是:

-只有當兩個指標指向同乙個陣列中的元素時,指標相減才有意義,其意義為指標所指元素的下標差

-當兩個指標指向的元素不在同乙個陣列中時,結果未定義

指標的比較運算:

-指標也可以進行關係運算( , >=)

-指標關係運算的前提是同時指向同乙個陣列中的元素

-任意兩個指標之間的比較運算(==, !=)無限制,而這樣的比較運算也沒什麼實際意義

-參與比較運算的指標型別必須相同

總結:

-陣列宣告時編譯器自動分配一片連續的記憶體空間

-指標宣告時只分配了用於容納位址值的4位元組 空間

-指標和整數可以進行運算,運算

結果為指標

-指標之間只支援減法運算,其

結果為陣列元素下標差

-指標之間支援比較運算,同時指標

型別必須相同

C語言中指標和陣列分析 下

事物的難度遠遠低於對事物的恐懼!陣列名可以當做常量指標使用,那指標是否也可以當做陣列名來使用呢?為了說明這個問題,我們先來看看陣列的兩種訪問方式,對於陣列int array 5 訪問方式有 下標形式 array 1 2 指標形式 array 1 2 兩種訪問方式的比較 指標以固定增量在陣列中移動是,...

C語言中指標和陣列

首先,明確乙個概念,指標是什麼,一旦提到這個老生常談且富有爭議性的話題,那真是1000個人有1000種看法。在國內的很多教材中,給出的定義一般就是 指標就是位址 從初步理解指標的角度來說,這種說法是最容易理解的,但是這種說法明顯有它的缺陷所在。指標就是位址 這種說法相當於 指標 字面值位址 或者說乙...

指標和陣列分析(上)

陣列是一段連續的記憶體空間 陣列的空間大小為sizeof arrary type arrary size 陣列名可看做指向陣列第乙個元素的常量指標 a 1的意義是什麼?結果是什麼?指標運算的意義是什麼?結果又是什麼?1 include 2 intmain 3 5int p null 6 printf...