複習c語言深度剖析 28 指標和陣列分析(上)

2021-09-26 20:01:50 字數 1975 閱讀 3603

陣列的本質

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

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

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

問題:a + 1的意義是什麼?結果是什麼? 

指標運算的意義是什麼?結果是什麼?

#include

int main()

;int *p = null;

printf("a = 0x%x\n", (unsigned int)(a));

printf("a + 1 = 0x%x\n", (unsigned int)(a + 1));

printf("p = 0x%x\n", (unsigned int)(p));

printf("p + 1 = 0x%x\n", (unsigned int)(p + 1));

}

執行結果:

%p是列印位址的,%x是以十六進製制形式列印,完全不同!另外在64位下結果會不一樣(%x在64位系統輸出還是32位的)。

2. 指標的運算

指標是一種特殊的變數,與整數的運算規則為 : 

p + n; — (unsigned int)p + n * sizeof( *p ); 

結論:當指標p指向—個同型別的陣列的元素時: p+1 將指向當前元素的下—個元素;p -1將指向當前元素的上—個元素。 

指標之間只支援減法運算 , 參與減法運算的指標型別必須相同,運算規則為 : p1 - p2;  — ( (unsigned int)p1 - (unsigned int)p2 )  /  sizeof(type); 

注意: 

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

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

指標的比較

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

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

任意兩個指標之間的比較運算(==,!=)無限制 

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

#include

int main()

;int i = 0;

char s2 = ;

char *p0 = s1; // 指向陣列第乙個元素

char *p1 = &s1[3];

char *p2 = s2;

int *p = &i;

printf("%d\n", p0 - p1);

//printf("%d\n", p0 + p2); // error

printf("%d\n", p0 - p2); // 雖然編譯通過,但結果不可預期

printf("%d\n", p0 - p); // error

printf("%d\n", p0 * p2); // error

printf("%d\n", p0 / p2); // error

return 0;

}

3.程式設計實驗

指標運算的運用

#include

#define dim(a) (sizeof(a) / sizeof(*a))

int main()

;char *pbegin = s;

char *pend = s + dim(s); // key point

char *p = null;

printf("pbegin = %p\n", pbegin);

printf("pend = %p\n", pend);

printf("size: %d\n", pend - pbegin);

for (p = pbegin; p < pend; p++)

printf("\n");

return 0;

}

執行結果:

4.小結

《c語言深度剖析》讀書筆記(四)指標和陣列

本文是自己讀書的時候一些關於該書的重點及感悟 目錄 1 指標 2 陣列 3 指標和陣列的關係 4 指標陣列和陣列指標 5 多維資料和多維指標 6 陣列引數和指標引數 7 函式指標 1 指標,即存放記憶體位址的變數,長度固定,32位系統中長度為4,說白了就是定址位數。當然,指標是變數,那麼免不了被訪問...

C 28 指標和陣列分析

問題 a 1的意義是什麼?結果是什麼?指標運算的意義是什麼?結果是什麼?程式設計分析 a 1 示例 include int main int p null printf a 0x x n unsigned int a printf a 1 0x x n unsigned int a 1 陣列名看著常...

C語言複習(三) 指標(一)

指標在c語言中是比較重要的,個人認為,c語言中最重要的是記憶體,如何操作記憶體是至關重要的,指標是c語言的精華,學好了指標才可以說c語言入了門。接下來認真總結一下c語言中指標的用法。資料型別的本質是固定大小記憶體塊的別名,指標毫無例外,指標也是占有記憶體空間的,在32位機器中,指標是佔4個位元組的,...