c語言char怎么用 兩個(gè)相同類型的指針變量能不能相加,為什么?
兩個(gè)相同類型的指針變量能不能相加,為什么?不能直接添加同一類型的兩個(gè)指針的原因是編譯器中不允許此操作。我不知道我在說什么語言。指針操作是一個(gè)相對(duì)復(fù)雜的類別?;ǜ嗟臅r(shí)間在這上面對(duì)我們有好處。1. 所有
兩個(gè)相同類型的指針變量能不能相加,為什么?
不能直接添加同一類型的兩個(gè)指針的原因是編譯器中不允許此操作。
我不知道我在說什么語言。指針操作是一個(gè)相對(duì)復(fù)雜的類別。花更多的時(shí)間在這上面對(duì)我們有好處。
1. 所有有效指針都是正整數(shù)(0可以用來定義無效指針,小于0的只能稱為非法指針)。此值表示內(nèi)存中的地址。記憶可以理解為一把尺子。上面的刻度是存儲(chǔ)器的地址,一毫米的最小刻度可以理解為一個(gè)字節(jié))。指針的類型定義僅指示它所指向的地址段中存儲(chǔ)的數(shù)據(jù)類型。假設(shè)它是一個(gè)4字節(jié)的數(shù)據(jù),那么指針的值只表示起始位置,下面的4個(gè)連續(xù)字節(jié)或刻度用于存儲(chǔ)數(shù)據(jù)。
2. 添加兩個(gè)相同類型的指針是沒有意義的。例如,P1和P2是int類型的指針。盡管它們指向的內(nèi)存中有兩個(gè)int數(shù)字N1和N2,但這兩個(gè)數(shù)字可能相鄰、相距很遠(yuǎn),甚至在同一個(gè)位置。假設(shè)P1值,即N1位置的起始值為1234,P2為2345。此時(shí),通過直接加法獲得的數(shù)據(jù)3589可能已經(jīng)超過最大存儲(chǔ)器值或者指向無意義的存儲(chǔ)器地址,因此指針加法是無意義的。正確的做法是添加N1和N2。
3. 指針可以從立即數(shù)中減法、加法或減法,這是有意義和允許的。例如,我想知道N1和N2之間有多少字節(jié)的內(nèi)存。減去它們等于減去尺子上的兩個(gè)刻度,即長(zhǎng)度或?qū)挾取4送?,加法和減法和立即數(shù)主要用于快速尋址。例如,我有一個(gè)起始指針為P0的數(shù)組。如果數(shù)組中有一系列的int值,那么由2*sizeof(int)得到的值是第三個(gè)元素的地址,也是一個(gè)指針,這是有意義的(因?yàn)閕nt占用的字節(jié)數(shù)對(duì)于不同的語言和系統(tǒng)可能是不同的,因此,我們使用sizeof函數(shù)來獲得它,而不是直接添加常規(guī)的4)。
4. 指針不僅可以指向簡(jiǎn)單數(shù)據(jù),還可以指向復(fù)雜數(shù)據(jù)塊或組合類型。簡(jiǎn)而言之,一個(gè)類型的指針的值表示該類型數(shù)據(jù)在內(nèi)存中位置的起點(diǎn)。這只是一個(gè)天平。指針的特定寬度取決于特定類型。指針操作中最常見的錯(cuò)誤是:越界、指針非法、指針指向的數(shù)據(jù)不是期望的起始位置而是中間位置,指針的值和指針指向的值無法區(qū)分。
C語言指針可以相加嗎?為什么?
指針變量有加減運(yùn)算,但要注意以下幾點(diǎn):
1。指針變量存儲(chǔ)地址值,即數(shù)字地址。例如,指針變量的值是0x20000000,這意味著指針變量將位于0x20000000的內(nèi)存地址存儲(chǔ)在內(nèi)存中。指針變量可以加減,但只能用整數(shù)數(shù)據(jù)加減。此時(shí),加法或減法的含義不是對(duì)其地址值的加法或減法。換句話說,如果指針變量p的值是0x20000000,那么p=p 2的值不是0x20000002,它不是地址值的簡(jiǎn)單相加,因此地址值的加減多少與指針指向的數(shù)據(jù)類型有關(guān)。如果在32位操作系統(tǒng)上,P是指向整數(shù)數(shù)據(jù)的指針變量,那么在P=p2之后,P的地址值變成0x2000008,也就是說,地址值實(shí)際加了多少:sizeof(int)*2。為了說明白點(diǎn),我們添加和減去的數(shù)字是由指針指向的數(shù)據(jù)類型度量的。p2表示P在內(nèi)存中向前移動(dòng)兩個(gè)int的距離。如果P不是int類型,而是其他類型,則相同。整數(shù)數(shù)據(jù)的指針減法也是如此。
2. 指針可以減,但不能加:可以減去兩個(gè)相同類型的指針變量。它們的含義表示兩個(gè)指針指向的內(nèi)存位置之間分隔了多少個(gè)元素(請(qǐng)注意,它是一個(gè)元素,而不是字節(jié)數(shù))。例如,對(duì)于int類型的指針P和P1,P1-P的含義表示它們之間分隔了多少int類型的元素。其他類型的指針變量也是如此。指針變量的自加和自減實(shí)際上是整數(shù)1的加和減。
3. 大小可以在指針之間進(jìn)行比較。但是,它也僅限于同一類型的兩個(gè)指針變量,比較不同類型指針變量的大小是沒有意義的。指針之間大小比較的含義表示它們?cè)趦?nèi)存中指向的位置之間的高低關(guān)系。
C語言:兩個(gè)指針變量為啥可以相減,比較,賦值,唯獨(dú)不能相加呢?請(qǐng)舉個(gè)例子,謝謝?
比較運(yùn)算可以得到兩個(gè)指針的相對(duì)位置,加法的結(jié)果為零。
例如,總共有100個(gè)房間。A住在67街,B住在80街。通過比較和計(jì)算,我們可以知道它們之間的距離有多遠(yuǎn),但是如果我們使用6780,我們會(huì)得到什么呢?