指针的运算总结
一、算術運算:
??? 1、指針與證書的加減運算:(px+n,px-n)
???? 指針作為地址量加上或減去一個整數n,其意義是指針當前指向位置的前方或后方第n個數據的位置。由于指針可以指向不同數據類型,即數據長度不同的數據,所以這種運算的結果取決于指針指向的數據類型。
??? 例如:當字符指針加1,實際結果是指針中的地址值加1;整數指針加1,實際結果是指針中的地址值加2;
??? * p+n的實際操作是:(p)+n*sizeof(數據類型);
??? * p-n的實際操作是:(p)-n*sizeof(數據類型);
?
??? 2、指針加1、減1運算:(px++,++px,px--,--px)
??? 具有1中的計算特點,例如:? y=*px++;
??? 該表達式中有三種運算:=、*和++。 *和++優先于=。? *和++屬于同級運算,其結合規則是從右至左。所以++運算是對px進行的。相當于 y=*(px++);
??? 這里的px++是后置運算。因此該表達式的運算順序是:訪問px當前值指向的目標,把目標變量的值賦予y,然后px加1指向下一個目標。
?
??? 3、指針的相減運算:(px-py)
????如果兩個指針px和py所指向的變量類型相同,則可以對他們進行相減運算。結果是兩指針指向的地址位置之間的數據個數。實際上就是地址計算。所以兩指針相減的結果值不是地址量,而是一個整數。
?
二、關系運算:
??? 數據在內存中的存儲邏輯是由前向后,那么指向后方的指針大于指向前方的指針。
?
三、賦值運算:
??? 1、把一個變量的地址賦予一個指向相同數據類型的指針,例如:char a,*p; p=&a;
??? 2、把一個指針的值賦予相同數據類型的另外一個指針,例如: int *p,*q; p=q;
??? 3、把數組的地址賦予指向相同數據類型的指針。例如: char a[10], *pa; pa=a;
?
另:指針賦值區別,如果一開始只是定義,后面賦值,則是如下形式:
char a, *p; p=&a;
? 如果在一開始定義的時候就賦值,則是如下形式:
int a, *p=&a;
于是也可以理解了這種形式:
int n;? int?*p1=&n; int *p2=p1; 因為p1只是在定義賦值的時候才是*p1=&n,如果在不是定義的時候用到p1,則p1就是代表&n,不用寫成*p1;
于是上面的形式等價于:int n;? int?*p1=&n; int *p2=&n;
轉載于:https://www.cnblogs.com/duancanmeng/archive/2012/03/06/2524631.html
總結
- 上一篇: 步步为营UML建模系列总结
- 下一篇: 软件开发的核心是技术人员吗?