1樓:匿名使用者
1、p++ ++p相當於把p指標移動到p指標當前值加上sizeof(t)的位置,比如p=100,sizeof(t)=4,p++或者++p之後p等於104。
2、p-- --p相當於把p指標移動到p指標當前值減去sizeof(t)的位置,比如p=100,sizeof(t)=4,p--或者--p之後p等於96。
3、其中++或者--在後面,先以p當前位置來計算表示式,然後再移動指標位置;在前面先移動指標位置,再以移動後的位置計算表示式。
2樓:墨汁遊戲
一、含義不同:
p-- --p相當於把p指標移動到p指標當前值減去sizeof(t)的位置,
p++ ++p相當於把p指標移動到p指標當前值加上sizeof(t)的位置,
二、使用不同:
比如p=100,sizeof(t)=4,p++或者++p之後p等於104。
比如p=100,sizeof(t)=4,p--或者--p之後p等於96。
三、表示式不同:
其中++或者--在後面,先以p當前位置來計算表示式,然後再移動指標位置;在前面先移動指標位置,再以移動後的位置計算表示式。
設一組指標變數
pa、pb、px、py、pm、pch1、pch2,分別指向上述的變數a、b、x、y、m、ch1、ch2,指標變數也同樣被存放在記憶體,儘管所指向的變數型別不同,但是這些指標變數所佔記憶體空間都是2個位元組,而與所指向變數的型別無關。
如指標變數pa的值為2000,是變數a在記憶體的地址。因此,pa就指向變數a。變數的地址就是指標,存放指標的變數就是指標變數。
3樓:銜泥無珮
舉例來int a[n];
int *p=a;
p指向a[0];
p++指向a[0],但是之後則指向a[1];比如*p++=1,那麼a[0]=1,然後p指向a[1];
++p指向a[1],之後p也指向a[1];
自減同上
4樓:匿名使用者
設p當前值為1,x=p++,執行此語句後,x=1,p=2
設p當前值為1,x=++p,執行此語句後,x=2,p=2 p++是執行完後進行自加,++p是先進行自加。
同理p--和--p,一個是先執行後自減,一個是先自減,再執行。
c語言指標p+1與p++有什麼不同 5
5樓:匿名使用者
第一句應該是p = p+1吧。
這2句的結果是一樣的,相信樓主也是知道的,都表示p+1然後結果儲存在p中。
但是所有的研發還內是實驗,如果碰到自加1的運算都會選擇p++,這裡面的關鍵點是p++的運算速度比p=p+1快,雖然一條語句說快能塊多少呢?但是運算步驟少,不僅僅是提高速度,而且可以減少出錯的機率,這對於工程來說也是很重要的,必須要儘量減少不確定因素對程式的影響。
下面說下為什麼步驟少:
在計算p = p+1的時候,cpu的順序是這樣的
1 。 首先找到p+1中右邊p的地址,記住,cpu並不知道左邊的p和右邊的p是同一個地址,他會將這兩個p視為兩個不同的變數。
2. 找到右邊的p的地址後,然後加1,
3,這一步就是找左邊的p的地址。
4,。將結果賦值給左邊的p。結束
5. 計算機是不是很笨,是的,他很笨,但是他速度快,並且他嚴格按照規矩辦事,所以一般不會出現錯誤。
當執行p++的時候。
1.找到p的地址,然後加1,結束。
可以看出,p=p+1和p++結果是一樣的,但是這個計算過程是不一樣的。這容才是他們的區別。
祝你進步!
6樓:
p+1執行後p的值是p,而p++執行後p的值是p+1。
7樓:匿名使用者
我給你舉個例子,假設定義一個double 型別陣列,每個是4個位元組,所以,p+1表示指標移動了一個位置,也就是p+4,而p++只是p+1
8樓:匿名使用者
p+1的話指標實際上沒有移動,而p++則指標向下移動一個單位
9樓:匿名使用者
p+1和p++都表示是指標移動一個單位,只是p++要使用完本次指標才移動一個單位的,而p+1則是將指標移動一位才使用的。。。。
10樓:匿名使用者
p+1只是指標向後移一位,此時p本身指向的值不變,p++則是p指向它後一位指標指向的值。
11樓:匿名使用者
區別有兩點
1.p++將p的指標移動了,而p+1則沒有
2.p++返回沒加1的p的指標,而p+1返回加1後的指標
12樓:好人泉哥
p++相當於p=p+1
這裡的來1特別要注意自
它的單位是基本元素的型別
例如int a[4]=;
int*p=a; //a是個常量,就是『1』的首地址則*p==1
*p++==2
*(p+1)=2
13樓:匿名使用者
p+1 與p++的區別就是,
p++修改了p本身的值
相當於p = p+1;
14樓:匿名使用者
第一個p值不變,第二個p值加了一個一。
15樓:一季忘川
int *p,*q,*s;
int a[10];
p = a; //p 指向
襲 a[0]
s=p+1; //s 指向 a[1] , p沒有變,還是指向 a[0]
q=p++; //相當於 q=p ; p=p+1; q指向a [0] ,p指向a[1]
關於指標變數,*p和p到底有什麼區別啊?
16樓:匿名使用者
1、內容不同
星號是用來指定變數p是指標,p是一個變數,其值為另一個變數的地址,它表示了在記憶體中的一個地址,即,記憶體位置的直接地址。而*p是所指向地址的值。
2、資料型別不同
在程式宣告變數的時候的*,只是表明「它是一個無符號整數,這個整數指向某個記憶體地址,一次訪問sizeof(type)長度」,所有指標的值的實際資料型別,不管是整型、浮點型、字元型,還是其他的資料型別,都是一樣的,都是一個代表記憶體地址的長的十六進位制數。
而*p可以是整型、浮點型或者字元型。
3、使用方法不同
在程式設計時,*p可以直接使用,因為p宣告為一個指標,使用它的時候需要帶上*表示該位置的值,比如int a,*p;*p=a。
直接使用p的時候,p=&a。
17樓:凌亂心扉
區別:以下面的情況說明:
1、int a = 5;
int* p = &a;
結論:*p 是指標變數p指向的變數a的儲存內容,*p = 5;
p 是指標變數的儲存內容,因為p指向a,所以p的儲存內容(儲存空間的值)就是系統為變數a分配的儲存地址;
2、分析:
int a = 5;
int* p = &a;
int* q = p;
3、【說明】
1)上面的程式中首先宣告瞭一個int型別的變數a,初始化為5;這個過程為:
2)在初始化時,儲存空間儲存的是int型的值5,儲存地址是由系統自動分配的,同理要宣告一個指向a的指標,在初始化的時候賦值給指標變數的值應該是變數a的儲存地址,故而有 int* p = &a;
4、在下面的程式中:
int arr = ;
int* parr = arr;
同理,要是宣告另外一個int型別的指標變數q:
1)int* q = p;
宣告瞭一個int型別的指標變數,並將指標變數p的值賦予q,同樣是變數,a = 5,5是變數a的儲存空間的值,那麼p=?,p等於p儲存空間的那個值,即p=#ffa1(a的儲存地址);
現在將這個值賦給了指標變數q,正如a初始化的過程一樣,int a=5的過程,是將5儲存在了int型別變數的儲存空間之中,初始化指標變數q時,也是將等號右邊的值儲存在q的儲存空間之中,上邊的操作的結果如下:
使得指標變數q指向了變數a。
5、【說明】
從上面的操作可以看出,&p代表的是指標變數p的儲存地址。
int* q = *p;
宣告瞭一個指標變數q,並對其初始化,這一過程的操作如下:
為指標變數q初始化,q的儲存空間中儲存的值為5.
【說明】
1、從上面的操作可以看出,是將*p的值賦給了q,p指向變數a,p=#ffa1,而*p的過程就是獲得p地址處的儲存空間的值,即*(#ffa1)=5,也就是將5賦給了指標變數q,q的儲存空間儲存的是5;
2、指標變數是指向某一變數的變數,在其儲存空間中儲存的一般是其他變數的儲存地址,上面的初始化過程int* q = *p;是非常危險的,有可能造成程式奔潰。
18樓:仁0者
p的值是指標指向的資料的地址,而*p表示的是指標指向資料的數值,例如a=2;//a的地址為1000
p=&a;
則:p=1000
*p=2
19樓:匿名使用者
p是一個記憶體地址值
*p是地址p指向的內容
對地址操作的時候直接用p,對內容操作的時候,用*p
20樓:匿名使用者
首先搞明白一點,printf語句中表示式的執行順序是從右向左的,並且對於*(q++),首先進行解引用操作,再自增,即*q, q=q+1;所以說第一個printf的輸出為2 2
對於第二個printf,首先執行(*q)++,再執行*p++,對於(*q)++可以轉化為先執行(*q),即輸出它的值,再執行(*q)=(*q)+1,最後輸出*p,所以結果為3 2
21樓:樂酷科技
*p++就等於*(p++) p自加 先算出當前地址的值*p 然後指向下個地址
(*p)++是取出地址裡的值 這個值自加 p還是指向原來的地址
22樓:匿名使用者
*p++ 由於++和*同優級,是自右向左的結合方向*(p++),因此等價於*(p++);他們的作用是得到p指向的變數值(*p),然後p +1=》p
(*q)++,是先取p指向的變數值,然後其值再加一;
23樓:匿名使用者
我來舉個例子吧
int a=100;
int * p;//定義 指標 的 指標整形變數p=&a;//對普通 整形變數 變數 取地址操作,在賦值給 指標整形變數 p;
這個是我以前提的問題,可以看一下
24樓:匿名使用者
1. printf中表示式的計算是右結合的,即從右向左運算;但輸出還是從左向右
2. 第一個printf,先取q所是單元的值顯示,即為2,再對q++,即q所指單元地址後移一個單元,這裡無意義;然後再對p指單元后自增,先輸出2。「*」運算子的優先順序高於「++」運算子。
3. 第二個printf,都是對p和q所指單元的值進行操作,(*q)++先輸出a的值2,再將其值加1變為3;再將p所指單元的內容a的值輸出3
25樓:yuan興
p代表的是一個儲存單元的地址,而p*則代表儲存單元裡面存放的內容
26樓:匿名使用者
定義時是*p,使用時p。
27樓:鏡面世界
呃⋯⋯第二個前面無運算子相當於p,有運算子且p是函式名或函式指標時,加括號相當於p,不是則無意義,p是函式名且返回指標且是呼叫時,不加括號是返回的指標的間接引用,第一個p不是指標的話無意義,如果是指標(什麼指標都行,包括函式指標等不常用的,但不能是野指標,執行時會報錯),如果這個表示式前面是運算子號,相當於p,如果前面是另一個表示式,是*p與那個表示式位與,p是函式指標時加括號相當於p,p是函式指標或函式的二級指標且該函式返回引用時是返回的引用的記憶體地址。(呼!累死我了,給個滿意啊!
看不懂的話等我有時間弄個**)
pp和ppsu有什麼區別,pp的奶瓶和ppsu的奶瓶有什麼不同?
一 性質不同 1 pp 聚丙烯,是丙烯通過加聚反應而成的聚合物。2 ppsu ppsu是一種無定形的熱性塑料。二 特點不同 1 pp 具有耐化學性 耐熱性 電絕緣性 高強度機械效能和良好的高耐磨加工效能等。2 ppsu 具有高度透明性 高水解穩定性。製品可以經受重複的蒸汽消毒。三 用途不同 1 pp...
PVC板材和PP板材的區別,PVC和PP的區別
pvc是屬於板材中較為低端的,只是其的耐腐蝕性較好。而pp板材符合環保要求的工程塑料之一,它無毒無味,符合國家的環保標準。耐高溫 具有優良的電絕緣效能和化學穩定性 pp板材加工推薦博鼎絕緣板材 pp 無臭 無毒 無味符合國家衛生標準,密度小,是通用塑料中最輕的一種。可在水中煮沸,120度蒸氣消毒,能...
PP無紡布有什麼特點?PP無紡布和滌綸無紡布的區別
pp無紡布有哪些特點。1 耐候性 無紡布對紫外線很敏感,加入氧化鋅硫代丙酸二月桂脂,炭黑式類似的乳白填料等可以改善其耐老化效能。2 物理效能 pp無紡布為無毒 無味的乳白色高結晶的聚合物,是目前所有塑料中最最輕的品種之一,對水特別穩定,在水中14h的吸水率僅為。分子量約8 15萬之間,成型性好。但因...