指針的加法操作我們見過很多,但是減法操作遇到的好像很少。
有這么一個筆試題:
inta[]={1,2, 3}; int *p1 = &a[0]; int *p2 = &a[2]; printf("%ld ", p2 - p1);一個數(shù)組,兩個指針,指針p1指向數(shù)組第一個元素,指針p2指向數(shù)組第三個元素,問p2-p1的結(jié)果是多少?
我覺得答案應(yīng)該分兩種,8或者2。
結(jié)果8是因為一個整數(shù)占了4個字節(jié),兩個整數(shù)當(dāng)然是8個字節(jié)。
結(jié)果2是因為他們相差了兩個元素。
下面還是敲代碼試一下,直接用printf輸出結(jié)果,選擇%ld作為輸出格式。
root@Turbo:test# ./test 2 root@Turbo:test#結(jié)果是2。
所以相同類型指針做減法操作的時候,結(jié)果還是元素的個數(shù)。
就好像p1+2加的是8個字節(jié)而不是2個字節(jié)一樣。
最后,給大家留個問題,如果希望printf輸出的結(jié)果是8,那代碼應(yīng)該怎么修改?
答案:
對指針進行強制類型轉(zhuǎn)換,可以轉(zhuǎn)換成整型或者字符型指針。
printf("%lu ", (int)p2 - (int)p1); printf("%lu ", (char *)p2 - (char *)p1);
審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
字符
+關(guān)注
關(guān)注
0文章
230瀏覽量
25143 -
指針
+關(guān)注
關(guān)注
1文章
475瀏覽量
70477 -
代碼
+關(guān)注
關(guān)注
30文章
4695瀏覽量
68081 -
數(shù)組
+關(guān)注
關(guān)注
1文章
411瀏覽量
25858
原文標題:指針減法
文章出處:【微信號:學(xué)益得智能硬件,微信公眾號:學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
函數(shù)指針的使用簡述
函數(shù)指針在Linux內(nèi)核和C語言開發(fā)中用的非常多,而且在設(shè)計操作系統(tǒng)的時候也會用到,因此這里將詳細講解函數(shù)指針。既然函數(shù)指針也是指針,那函數(shù)
指針變量的基本操作
指針變量也是一個變量,對應(yīng)一塊內(nèi)存空間,對應(yīng)一個內(nèi)存地址,指針名就是己址。這空內(nèi)存空間多大?一個機器字長(machine word),32位的CPU和操作系統(tǒng)就是32個位,4個字節(jié),其值域為
發(fā)表于 10-26 09:56
?391次閱讀
C語言:指針運算
元素的位置,以此類推。把一個指針減去3使它向左移動3個元素的位置。要注意的是,如果進行完加法或者減法運算后,指針指向的位置不在數(shù)組的范圍內(nèi),則發(fā)生了數(shù)組越界。對這個指針執(zhí)行間接訪問,即
發(fā)表于 01-11 15:11
【原創(chuàng)】聊一聊內(nèi)存指針操作
中,各種處理器都有對內(nèi)存的不同的尋址方式讀寫內(nèi)存。在高級語言中,C語言是唯一可以進行內(nèi)存操作的語言,C語言對內(nèi)存的操作主要需要通過指針來完成。1、使用指針
發(fā)表于 07-28 09:10
C語言入門教程-指向指針的指針
指向指針的指針
創(chuàng)建一個指針,使它指向另一個指針,這是可能的,而且常常也是必要的。這一技術(shù)有時被稱為句柄。在某些情況下,操作系統(tǒng)需要有自主
發(fā)表于 07-29 12:10
?1081次閱讀
加法器,加法器是什么意思
加法器,加法器是什么意思
加法器 : 加法器是為了實現(xiàn)加法的?! 〖词钱a(chǎn)生數(shù)的和的裝置。加數(shù)和被加數(shù)為輸入,和數(shù)與
發(fā)表于 03-08 16:48
?5453次閱讀
補碼加法,補碼加法計算原理
補碼加法,補碼加法計算原理 負數(shù)用補碼表示后,可以和正數(shù)一樣來處理。這樣,運算器里只需要一個加法器就可以了,不必為了負數(shù)的加法運算,再配一個減
發(fā)表于 04-13 11:41
?1.8w次閱讀
為什么使用指針?C++中的“指針”
為什么使用指針?因為在操作大型數(shù)據(jù)和類時,指針可以通過內(nèi)存地址直接訪問數(shù)據(jù),可避免在程序中復(fù)制大量的代碼,因此指針的效率最高。一般來說,指針
加法器原理
加法器是產(chǎn)生數(shù)的和的裝置。加數(shù)和被加數(shù)為輸入,和數(shù)與進位為輸出的裝置為半加器。若加數(shù)、被加數(shù)與低位的進位數(shù)為輸入,而和數(shù)與進位為輸出則為全加器。常用作計算機算術(shù)邏輯部件,執(zhí)行邏輯操作、移位與指令調(diào)用
加法器工作原理_加法器邏輯電路圖
加法器是產(chǎn)生數(shù)的和的裝置。加數(shù)和被加數(shù)為輸入,和數(shù)與進位為輸出的裝置為半加器。若加數(shù)、被加數(shù)與低位的進位數(shù)為輸入,而和數(shù)與進位為輸出則為全加器。常用作計算機算術(shù)邏輯部件,執(zhí)行邏輯操作、移位與指令調(diào)用
發(fā)表于 02-18 14:40
?3.3w次閱讀
加法器的原理及采用加法器的原因
有關(guān)加法器的知識,加法器是用來做什么的,故名思義,加法器是為了實現(xiàn)加法的,它是一種產(chǎn)生數(shù)的和的裝置,那么加法器的工作原理是什么,為什么要采用
串行加法器和并行加法器的區(qū)別?
串行加法器和并行加法器是兩種基本的數(shù)字電路設(shè)計,用于執(zhí)行二進制數(shù)的加法運算。它們在設(shè)計哲學(xué)、性能特點以及應(yīng)用場景上有著明顯的區(qū)別。
評論