p p 1這句話,相當於將p所指向的地址增加1 為什麼不是將p內的數字 1 還有P的值是哪來的

2022-01-19 16:59:02 字數 5286 閱讀 8933

1樓:匿名使用者

*p的意思首先是p是一個指標型別的。那麼我覺得你並不明白指標存於記憶體中的形態。拿int型做比較,int型存的是一個數字,而指標型別存的是一個記憶體中的地址。

也就是說你讀p在記憶體裡的值是沒有意義的,要讀p所指向的地址中的內容才是我們要的。這就解釋了"p的值是哪來的"和為什麼不是將p內的數字+1"

那麼*p++這句話就是說將p所指向的地址的地方+1 即指向下一個地址空間。這就牽涉到p所指向的物件的大小,如果是一個8位的那麼p中的內容會+8這樣就會指向下一個物件,如果p中的物件是32位的 那麼p的值就會+32,同樣是指向下一個物件。這就解釋了」相當於將p所指向的地址增加1「。

最後想將p所指向的數字+1,使用&p++來操作。

如果覺得我的回答能對你有所幫助,就請採納我一下吧~ ^-^ 謝謝。

2樓:上帝來自地球

1.*相當於取值操作,所以*p=*p+1,是對p內的值進行操作的。

2.p是一個指標變數,你可以對進行賦值,也可自己加減。

列如int *p,a.b[10];

p=&a;//這樣就把a的地址付給了p

*p=*p+1;//相當於將a的值加1

p=b;//這樣就把b[0]的地址付給了pp=p+1;//相當於將p的值加1,p就指向b[1]

int*p,p++的值就是p所指向的變數的地址值加1,這為什麼錯

3樓:

當然錯!若p==12345,12345+1==12346,而執行p++後p卻==12349——因為p++是+一個sizeof(int),時下通常是4位元組。

4樓:pp龍飛

這不是p所指向的變數的地址值加1,而是加一個int單位位元組數(c++是4,不同編譯環境不同)。那麼p++的值就是p所指向的變數的地址值加4啊。明白了嗎?複習一下吧,書上有的。

5樓:匿名使用者

不是變數的地址值加一,而是加四。你首先得明白指標式幹什麼用的。為什麼會有資料型別這個東西

6樓:匿名使用者

//看下這個程式你就知道是怎麼回事了.

#include

#include

void main()

7樓:匿名使用者

是地址值加1所對應的那個值吧·

c語言:若有定義 int *p, 則表示式 p++ 的值就是 p 所指向的變數的地址值加1?

8樓:末了待續

這是錯的,p沒有進行初始化

9樓:匿名使用者

我也是剛學指標。

p就是所指向的變數的地址。

*p就是所指向的變數的值

因此 p++就是地址值加1吧,額,我也不確定。因為我還沒瞭解到有關儲存地址的知識。

我覺得應該是加1了。

10樓:

錯誤,要看變數佔用的地址空間,這裡是加sizeof(int)printf("%d",*(p++));

printf("%d",*(p--));

兩次輸出結果怎麼可能一樣呢,

printf("%d",*(p++)); 輸出2printf("%d",*(p--)); 輸出3

11樓:劉文正粉絲

你把++和--寫p的前面

*(++p)

*(--p)

你這玩意和指標一點關係也沒.....你前面學的不好啊~自增和自減最好是寫成單獨的語句

你的那個p沒用,用a就可以表示

為啥指標要區別型別?就是因為這p++這裡是加1,但邏輯上有加sizeof(int)個數.如果double和int都用一個指標,那鬼知道這p++在邏輯上是加sizeof(int)個還是sizeof(double)個?

12樓:匿名使用者

若有定義 int *p, 則表示式 p++ 的值就是 p 所指向的變數的地址值加1?---這句話是錯的。p++後的結果是地址加上一個整數,該整數指標指向變數型別在記憶體中佔用的位元組長度。

//為什麼兩次輸出結果一樣--因為語句中是對++或--之前的值進行操作。改為++p,--p就會不一樣了。

回答完畢。

13樓:

這個要怎麼講呢,p在定義的時候是有初值的,只是沒有進行初始化,這個值有沒有效不一定,所以p所指向的是不是變數不好說,但是p加一後,地址是肯定挪了一位......

這樣吧,沒有初始化,就是為地址無效,即沒有指向變數,所以後面的那句話視為錯誤.

14樓:

不可能一樣。printf("%d",*(p++));輸出2,而printf("%d",*(p--));輸出3。因為p=&a[1]=2,所以printf("%d",*(p++));輸出*p=2;那個++在輸出後執行,使p指向a[2]=3;接著printf("%d",*(p--))輸出*p(注意這時p+1了,指向了3)=3;完成後才對p時行--操作又使它指向2。

15樓:忽忽上升

經測試輸出結果不一樣。你的問題就不對。

另外p++是先輸出再加1,p--也是先輸出再減1.

16樓:閆鵬程程

執行p++後p所指向的地址是p所指向的地址加sizeof(int)

c語言中*p++是*p=*p+1 還是*p=(*p+1) 為什麼

17樓:匿名使用者

兩個處於同一優先順序,結合方向是自右向左

其實這樣只是當++在變數前面的時候才處理同一優先順序,當++在變數之後時,你可以將++的優先順序看成最低階的,比逗號運算子的優先順序還低

ps:先進行*p,執行完後再進行++運算,因為這個時候的++在變數後面,所以其優先順序最低

a = *p++

相當於兩條語句

a= *p;

p=p+1;

c語言指標*p中 p+1什麼時候是指向下一元素地址,還是指向下一位元組?

18樓:

假設地址空間對映關係如下

p --> x(也為指標)---> y理解為*p = x,

則*(p+1)的內容為x1, *(x1)的內容可能為y1p+1 -->x1-->y1

*p+1表示為 x+1,那麼*(x+1)的內容可能是y0.

19樓:匿名使用者

定義了int *p之後,那麼

[p] [p+1] [p+2]10 23 8

1)p+1表示下一個元素的地址;

2)*p+1表示*p的值+1,*p+1=10+1=11;

3)*(p+1)表示下一元素的值,即*(p+1)=23。

20樓:

這麼說吧,設有一個陣列 years[0]=2009,years[1]=2010,years[2]=2011;當你把陣列的首地址賦給指標p時:p=years.那麼現在是:

*p=2009,*(p+1)=2010,*(p+2)=2011.

指標**p是用來存指標的地址的,比如有一個指標變數a,a裡面存的是某個值的地址,但指標變數a本身也需要有一個儲存地址假設為00ffh,那麼指標變數可以用來儲存指標a的地址00ffh。

則p+1就是a的地址加一個單位,*p+1是先求出*p即a裡面存的值,然後該值再加1.

21樓:

看你申明的p的型別

如果你申明char* p,那p+1就是指向下一個char型的地址;

如果你申明int* p,那p+1就是指向下一個int型的地址;

如果你申明int* p[10](注意哦,這個指標儲存的是陣列的首元素地址的地址!!並不是陣列首元素的地址),那p+1就是指向下一個int[10]的地址,也就是下一個包含有10個int型元素的陣列的首地址;

**p的值是*p的地址,*p的值是p指向的地址所存的元素值;

p+1上面解釋過了哈~然後就是*p+1,這個首先要看*和+號的優先順序,在c中,*優先順序高於+,所以*p+1的意思就是*p的值加上1,*p不用解釋吧,如果要知道就多說幾句:p儲存的是地址,*p就是這個地址上所存的元素值。

懂起了哇?

22樓:舒樂秋

大概明白你想問什麼了,你的理解有問題,如果要指向下一個儲存單元,無論指標還是陣列都是+1;

比如說char *p = "ab";

char c = "ab";

p是a的地址,p+1是b的地址

同樣c是a的地址,c+1是b的地址

你說的儲存單元如果是指變數所佔位元組數的話,那是不需要乘的,因為在什麼指標是已經說明了型別,編譯器會自動修正這個偏移量的int *p ; 那p+1實際上在彙編**裡面執行的是p+4

還有 &a[i][j] = &((a[0]+i)+j) 第一個+i實際上是+i*j*(資料大小)

最後,說c沒有指標那位....你有學個c嗎...

c語言中為什麼 假如定義一個*p=&a,然後為什麼這個*p++與*(p+1)是相等的?

23樓:匿名使用者

int *p.這是一個指標變數,它就是一個只能用來裝地址的變數。p++就等於p+1啊,他們都是指向一個位置的,如在vc下,一個整形資料佔4位元組,p=2000(地址,二進位制的,這樣寫方便你懂),*p++是說用後p指向的地址向下移一位,所以p=2004;p++是用完後就加,*(p+1)說的是指向2004這個地址!

24樓:ws萬帥

*p++=*(p++)=*(p+1)

首先是運算子的優先順序,*p++=*(p++); 其次,對於指標的自加,系統已經根據指標所指的資料型別進行了處理,故p++與p+1的作用相同

25樓:旋律

第一個是先指後加注意p的值不在與原來的值一樣了

第二是先加後指p的值不變

26樓:無有之見

*p=&a 以後,*p就指向變數a所在的地址了執行 *p++ 以後,實際是把這個地址增加了1 ,也就是*p 這個指標由原來指向變數a所在地址,變成了指向變數a之後的下一個地址,比如原來變數a的記憶體地址是01,*p就指向1 ,執行*p++後,現在*p 就指向記憶體地址02了。

而*(p+1) 是指把當前p所指向的地址加上一個單元,即比*p所指向的變數a所在地址 大一個地址單位的指標。這種情況不是指標p移動,而是把比p大一個單元的(p+1)當成一個新指標。

無論 *p++ 還是 *(p+1) 實際上都是指向的同一個地址(變數a所在位置的後一個地址),因此,它們是等價的。

一微米多少目,1 um相當於多少目?

1微米等於12500目。國際上比較常用等效體積顆粒的計算直徑來表示粒徑。目數越大,孔徑越小。一般來說,目數 孔徑 微米數 15000。比如,400目的篩網的孔徑為38微米左右 500目的篩網的孔徑是30微米左右。由於存在開孔率的問題,也就是因為編織網時用的絲的粗細的不同,不同的國家的標準也不一樣,存...

1克相當於多少1克等於多少毫升

1克 0.000001噸。因為1噸 1000千克 1000000克。1噸 t 1000千克 kg 2205磅 lb 1.102短噸 sh.ton 0.984長噸 long ton 1千克 kg 2.205磅 lb 1克 62616964757a686964616fe58685e5aeb9313334...

20Gbps是多快,1Gbps相當於多少兆??

1gbps是1024m的網速,20gbps就是20 1024 20480m的網速,現在的千兆網絡卡連線上千兆交換機後會顯示連線速度是1gbps但實際的速度取決於電信給你的頻寬,而不是你桌面上顯示的網速。gbps乙太網是ieee802.3乙太網標準的擴充套件,傳輸速度為每秒1000兆位 即1gbps ...