若有int a 10 , p p a 為什麼p i和a i等價,但p 和a 不等價?

時間 2021-05-29 22:56:19

1樓:劉偉奇

陣列名就是陣列首元素的位址,是乙個常量指標,始終指向&a[0]那整型變數作模擬,對於這麼乙個整型產量

int n;

你可以給n賦值

n=5;

也可以讓他原地加1

n++;

可以在常量身上加變數

p=5+n;

但是你可以「5++」嗎?

陣列名作為乙個常量指標也一樣。

2樓:深黑灰

P是乙個指標變數,a是乙個陣列,a實際上是乙個常指標,a+1得的是乙個位址,及a的值加一,不影響a本身。而a++影響。

我們可以先做個比喻

int i=5,

i++;/i=6

(i+5)++/報錯。

為什麼會這樣,因為i+5實際上得的是乙個常量,自增的作用物件只能是變數。

同理,a+5得的是乙個常量位址,a++是說對a本身加一,a會被改變,但a是常指標,所以a不能改變,報錯。

3樓:

a是陣列名,也是陣列所在連續記憶體單元的首位址,它是個常量,根本不能做++運算。

其實相關問題也簡單,就是指標的加減運算不同於數字的加減,指標變數+1,指標變數內儲存的值改變1個基型別所佔空間的大小。比如int * p, int佔4個byte,現在令p=a, p儲存變數a的位址1238,當p+1後,p不是變成了1238+1=1239,而是1238+4=1242,因為p+1的意義是p指向後1個物件。減法同理。

如果是double *, strcut node *, 則指標移動造成的指標變數改變又根據相應基型別有所不同。

4樓:黃哥

陣列名和指標之間有乙個不同之處,指標是乙個變數,因此,在C 語言中,語句

pa = a和 pa++ 都是合法的,但陣列名不是變數,因此,類似於a = pa 和a++ 形式的語法是非法的。

pa 是 int *pa

a 是陣列

上面的文字見下面書的85頁

《C程式語言(原書第2版·新版典藏版)》原著即為C語言的設計者之一DennisM.Ritchie和著名的計算機科學家BrianW.Kernighan合著的一本介紹C語言的經典著作。

我們現在見到的大量論述C語言程式設計的教材和專著均以此書為藍本。原著第1版中介紹的C語言成為後來廣泛使用的C語言版本——標準C的基礎。人們熟知的「hello,world」程式就是由《C程式語言(原書第2版·新版典藏版)》首次引入的,現在,這一程式已經成為所有程式語言入門的第一課。

原著第2版根據2023年制定的ANSIC標準做了適當的修訂,引入了新的語言形式,並增加了新的示例。通過簡潔的描述、典型的示例,作者全面、系統、準確地講述了C語言的各個特性以及程式設計的基本方法。對於計算機從業人員來說,《C程式語言(原書第2版·新版典藏版)》是一本必讀的程式語言方面的參考書。

int a 10 和int a 10 意義上有什麼區別嗎?

guozhi int a 10 是用來存放整型資料的 int a 10 是用來存放指標的,並且是整型指標 指標類似書的目錄,給計算機索引資料用的 踏雪飛鴻 這個2個都是陣列,只不過陣列裡面儲存的內容不同。int a 10 儲存10個整型資料的陣列。int b 10 儲存10個整型指標的陣列。void...

同一區域網下的電腦和手機為什麼不能互ping?

可能存在的原因如下 1 無線路由器設定問題,是否開啟了無線AP隔離,導致無法正常訪問 AP隔離,AP Isolation,是指開啟後,使各個連線的電腦間不能相互訪問,起到隔離作用,來保護不同使用者間的資料安全。適合大型的會議室 酒店 機場等公共場所的無線網路建設,不適合普通的家庭使用者 實測本機IP...

為什麼Redmik40和小公尺10s同為一億畫素最大數碼變焦卻不一樣

大頭熊 因為兩塊鏡頭是不一樣的。k40pro 那塊鏡頭是紅公尺note9pro的同款鏡頭HM2,也許是小公尺10那塊鏡頭的閹割版。而小公尺10s用的是小公尺10同款鏡頭,比k40pro 那塊鏡頭要好。具體引數對比 k40pro 的鏡頭引數 1 1.52英吋 9合1畫素 2.1 m融合大畫素 7p鏡頭...