1.(*p)++和*(p++)和*p++的區別:
總結:
字首遞增遞減和*優先順序相同,從右到左;
字尾遞增遞減比字首優先順序高,從左到右。比如1
2
int
arr[5] = ;
int
*p = arr;
*++p:p先自+,然後*p,最終為3
++*p:先*p,即arr[0]=1,然後再++,最終為2
*p++:值為arr[0],即1,該語句執行完畢後,p指向arr[1]
(*p)++:先*p,即arr[0]=1,然後1++,該語句執行完畢後arr[0] =2
*(p++):效果等同於*p++
例子:
#include "stdafx.h"
#include "stdio.h"
#include int _tmain(int argc, _tchar* argv)
; int *p;
p=a;
int k1,k2,k3;
//測試第一部分
printf("%d\n",p);
*p++=10;
printf("%d\n",p);
printf("%d\n",a[0]);//這裡不用*p來讀取數值是因為p的值已經改變,只好用a[0]來實現。
printf("%d\n",a[1]);
//測試第二部分
int b[5]=;
int *q;
q=b;
k1=*q++;
q=b;
k2=(*q)++;
q=b;
k3=*(q++);
printf("k1的值是%d\n",k1);
printf("k2的值是%d\n",k2);
printf("k3的值是%d\n",k3);
實現的是將10賦值給*p後p在自增1,也就是使得a[0]的值為10,而不是a[1]的值為10;之後自增*(p++)指向a[1]
測試第二部分:
[cpp]
view plain
copy
k1=*q++;
先將*q的值賦給k1,然後q值再自增,指向b[1];
[cpp]
view plain
copy
k2=(*q)++;
先將*p的值賦給k2,然後*q值再自增,b[0]的值加1;
[cpp]
view plain
copy
k3=*(q++);
和1相同,但是因為b[0]的值加1了,所以k3為2;
區別指標在表示式的左側還是右側!
程式設計師面試寶典一
1 int i i 首先宣告乙個變數i,然後將變數i的值 未初始化 賦值給自己 2 下面 的意義 void func int x,int count 求乙個整數轉換為二進位制之後包含多少個1 3 printf在vc6.0下是自右向左運算的 好像跟編譯器有關 int arr int ptr arr p...
C學習筆記之一 指標
指標變數 指標變數也是乙個變數,在指標中存放的內容是一塊記憶體空間的位址。就是說,指標就是 記憶體位址 計算機記憶體的最小單位是byte,每乙個byte都有乙個唯一的編號,這個編號就是記憶體空間的位址,通常叫作記憶體位址。這個編號在32位作業系統下是乙個32位的整數,在64位作業系統下是乙個64位的...
Java程式設計師面試寶典筆記
第六章1.變數必須先初始化後才能使用。2.byte short 和char 型別的運算操作首先會把這些值轉換為int 型別,然後對int 型別進行運算,最後得到int 型別的結果。3.靜態方法裡只能呼叫靜態方法 包括main 方法 4.main 方法必須加public 修飾,如果不加則預設為prot...