p, amp p, p的區別與聯絡

2021-05-06 16:27:37 字數 991 閱讀 2238

學習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直接序列擴頻抗干擾能力比較強,發為了提高...