讀錢能的C 有感

2021-04-02 06:16:12 字數 1887 閱讀 7410

一.c++語言擁有在執行時獲得變數的位址和操縱位址的能力;指標用於陣列,作為函式引數,用於記憶體訪和      堆記憶體操作。

#include

void main() 

int icount=18;

int * iptr=&icount;

*iptr=58;

cout

int* iptr;

*iptr=58;

指標忘了賦值比整型變數忘了賦值危險得多。

陣列名可以拿來初始化指標,陣列名就是陣列第乙個元素的位址

即:a等於&a[0];

int a[100];

int* iptr=a;

我們有第i個元素等價於:a[i]等價於*(a+i)等價於iptr[i]等價於*(iptr+i).

下標操作是針對位址而不僅僅是針對陣列名的;陣列名是一指標,它的型別是指向陣列元素的指標。

例:int iarray=;

sizeof(*iarray)表示陣列元素型別所佔的位元組數,它可以表示成sizeof(int).

注:陣列名是指標常量,區別於指標變數,所以,給陣列名賦值是錯誤的。

例:int iarray[100];

int sum=0;

for(int i=0;i<100;i++)

sum+=iarray;

iarray++;//error :陣列名不是左值

三.  堆記憶體分配和const指標

const int a=78;const int pi=&a;//指標指向的位址中的值為常量,不可被修改。

定義指向常量的指標只限制指標的間接訪問操作,而不能規定指標指向的值本身的操作規定性。

例:const int ci=7;

const int * const cpc=&ci;

注:以上告訴編譯器,cpc和*cpc都是常量,它們都不能作為左值進行操作。

一旦把陣列作為引數傳遞到函式中,則在棧上定義了指標,可以對該指標進行遞增,遞減操作。

例:#include

void sum(int array,int n)

int sum=0;

for(int i=0;isum+=*array;

array++;

cout

int a[10]=;

sum(a,10);

指標函式不能把在它內部說明的具有區域性作用域的資料位址作為返回值。

例:int *getint(char* str)

int value=20;

cout

可以返回全域性或靜態變數的位址。

void 指標是空型別指標,它不指向任何型別,即void指標僅僅只是乙個位址,所以空型別指標不能進行指標運算,也不能進行間接引用。

注:字串常量的型別是指向字元的指標,它與字元陣列名同屬於一種型別,字串常量在記憶體中以'/0'結尾。

字串常量的格式和特點:字串常量通常存放在記憶體data區中的const區,如果字元陣列是全域性變數,就存放在記憶體的data區中全域性或靜態區,如果字元陣列是區域性變數,就存放在記憶體的棧區等。

由於字串常量的位址屬性,所以兩個同樣字元組成的字串常量是不相等的。

例:#include

void main()

if("join"=="join")

cout<<"equal/n";

else

cout<<"not equal/n";

結果:not equal

注:輸出字元指標就是輸出字串,輸出字元指標的間接引用,就是輸出單個字元。

兩個字元常量的比較是位址的比較,兩個陣列名的比較也是位址的比較。

讀別人的大學有感

剛才看到乙個女程式媛的文章 我的大學 好像是三年制的,我的大學讀了五年,荒廢了五年,比人兩年學到的東西,在我看來是那麼的不可能。知道現在都研二了,還是什麼都不會。一天天的瞎混日子。怎麼能這樣呢?看來我給家裡人丟臉了,我沒有學成歸來。沒有成為家人的驕傲。部落格說好的要更新,到現在都沒有做。不能抱怨了,...

讀 《人性的弱點》 有感

歡迎 最近將 戴爾卡耐基 的 人性的弱點 一書看了兩遍,感受良深。於是將本書中本人認為很有道理的內容摘抄下來與大家分享。第一章 把握人際交往的關鍵 1.能設身處地地為他人著想,了解別人心裡想些什麼的人,永遠不用擔心未來。2.顧客總喜歡主動採買 而非被動購買。3.要首先引起別人的渴望,凡能這麼做的人,...

讀《邏輯的引擎》有感

最近看了 邏輯的引擎 心得寫下 1 計算機的分層理論來自與集合論和系統的不可判定性 不明白為什麼,也許是1為什麼就是1的問題?待定 因為系統部可判定,但是系統內部是可計算的,所以說需要分層結構建立新的系統證明結構的正確性 2 符號系統是用來證明數學的可證明行的有效工具 3 從存在性轉化為符號系統,在...