學習c語言時,指標的學習是比較難的一部分,常常分辨不了*p p &p 的區別。下面是摘抄別人的一段測試程式。
以下是我的一小段測試用的程式
void test()
應該注意的2點是:
1.給指標只能傳位址,不能傳值.否則要做強制型別轉換.
2.在做型別轉換和賦值時候,應該注意賦值的型別匹配.
指標與陣列的區別:
很多初學者弄不清指標和陣列到底有什麼樣的關係。我現在就告訴你:他們之間沒有
任何關係!只是他們經常穿著相似的衣服來逗你玩罷了。
指標就是指標,指標變數在32 位系統下,永遠佔4 個byte,其值為某乙個記憶體的位址。
指標可以指向任何地方,但是不是任何地方你都能通過這個指標變數訪問到。
陣列就是陣列,其大小與元素的型別和個數有關。定義陣列時必須指定其元素的型別
和個數。陣列可以存任何型別的資料,但不能存函式。
既然它們之間沒有任何關係,那為何很多人把陣列和指標混淆呢?甚至很多人認為指
針和陣列是一樣的。這就與市面上的c 語言的書有關,幾乎沒有一本書把這個問題講透徹,
講明白了。
#include
intmain()
;int *ptr1=(int *)(&a+1); //a陣列是乙個整體,sizeof(a)=20;&a表示陣列的首位址,&a+1會相當於加20個位元組長度。
int *ptr2=(int *)((int)a+1); //a強制轉換為int型後,相當於整數加一,所以這只是相當於位址加了乙個位元組。
int *ptr3=(int *)(a+1); //這個是大家非常熟悉的了,陣列a作為左值時相當於&a[0],它加一相當於加了乙個陣列型別的長度,即4位元組(整形)。a不能作為右值。
printf("%x,%x,%x",ptr1[-1],*ptr2,ptr3);
printf("%x,%x,%x",ptr1,ptr2,ptr3);
return 0;
}
DSSS OFDM FHSS的區別與聯絡
dsss直接序列擴頻抗干擾能力比較強,但是必須要求是可視就是說兩點間的路由上沒有任何的阻擋,或者阻擋的高度不能高於第一fresnel區,ofdm相對來說,在非視距的情況下可以進行資料傳輸。實際應用的時候,如果是點多多點的組網,ofdm之間的干擾更大些.dsss直接序列擴頻抗干擾能力比較強,發為了提高...
NULL,nullptr的區別與聯絡
1 在c語言中null代表空指標。例如 int i null define null void 0 意思是null是void 指標,給int i 賦值的時候隱式轉換為相應型別的指標,但是如果換成c 編譯器編譯的時候會出錯,以為c 是強型別的,void 不能隱式轉換為其他型別。一般的null定義的標頭...
DSSS OFDM FHSS的區別與聯絡
dsss直接序列擴頻抗干擾能力比較強,但是必須要求是可視就是說兩點間的路由上沒有任何的阻擋,或者阻擋的高度不能高於第一fresnel區,ofdm相對來說,在非視距的情況下可以進行資料傳輸。實際應用的時候,如果是點多多點的組網,ofdm之間的干擾更大些.dsss直接序列擴頻抗干擾能力比較強,發為了提高...