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 ...