《C專家程式設計》讀書筆記之 指標與陣列

2021-04-21 13:13:12 字數 1039 閱讀 1248

/*************陣列並非指標***************/

c初學者都會認為陣列與指標是相同的,的確在很多情況下是可以這樣認為,但是這是有條件的

先看下面宣告:

int a[100];

然後在引用:

extern

int *a;

然後程式會報錯。

讓我們先了解宣告和定義的區別

1.宣告相當於普通的宣告:它所說的並非自身,而是描述其他地方建立的物件,可以出現多次。

2.定義相當於特殊的宣告:它為物件分配記憶體。

再來看看左值與右值

int x=y;

x=y中,x含義是x所代表的位址,稱為左值,左值在編譯時可知,表示儲存結果的地方

y則代表的是y所代表位址的內容,稱為右值,右值在執行時才知道。

為了區分陣列名,c引入了

可修改的左值

這一術語,因此陣列名是個左值 但不是可修改的左值,故以下**會出錯

int a[10];

int b[10];

a=b;

然後,我們就可以對陣列與指標進行區別了

(1)對陣列下標的引用

char a[9]="abcdefgh";

char c=a[i];

//對於a[i]

//編譯器符號表具有乙個位址9980 a=9980

//執行時步驟1:取i的值,將它與9980相加 a+i

(2)對指標的引用

char *p;

...c=*p;

//編譯器符號表有乙個符號p,它的位址是4624 &p=4624

(3)對指標進行下標引用

char *p="abcdefgh";

char c=p[i];

//編譯器符號表具有乙個p,位址為4624 &p=4624

//執行時步驟2:取i的值,將它與5081相加 p+i

對著以上三個例子,區別一目了然

然後我們看看它們可以等同的情況

/****************陣列與指標相同*******************/

《C 專家程式設計》讀書筆記

前言 程式設計挑戰 計算機日期 第二章 這不是bug,而是語言特徵 switch的乙個bug break中斷了什麼 第三章 分析c語言宣告 程式設計挑戰 把c 語言的宣告翻譯成通俗的語言 include include include include define max len 100 enum ...

《C專家程式設計》讀書筆記

第一章 const float 表示乙個指向float型別常量的指標 第二章 1.在c語言中const並非真正表示 常量 在陣列定義與case中不可以使用 2.case的一些問題 2 3 main 15 這段 列印出來的是 3.函式可見性 void sb any where 2 extern voi...

《C專家程式設計》讀書筆記9

第九章 再論陣列 宣告本身還可以進一步分成3種情況 外部宣告 external array 的宣告。陣列的定義 記住,定義是宣告的一種特殊情況,它分配記憶體空間,並可能提供乙個初始值 函式引數的宣告。所有作為函式引數的陣列名總是可以通過編譯器轉換為指標。作為函式定義的形式引數,char s和 cha...