C ~ 指针的运算
一 :取地址运算“&”与取内容运算“*”:
单目运算“&”是取操作对象的地址 , “*”是取指针指向的对象的内容 , 两者互为逆运算
int x , *p ; p = &x ;
&(*p) = p 表示指针 ; *(&x)= x 表示变量x
二 :指针的算术运算 :
指针的运算与其基类型有关 , 一般的,如果p是一个指针 ,n是一个正整数 ,则对指针 p 进行 +(-)操作后的实际地址是 :
p +(-)n*sizeof(基类型)
char *p ; int *q ; float *tk ; //假设当前地址为 : p = 2110H , q = 2231H , tk = 2478H p += 1 ; // p = p + 1 = 2111H q += 4 ; // q = q + 4*4 = 2239H tk -= 3 ; // tk = tk -3*8 = 246CH
三 : 指针自加 ,自减运算 :
指针的自加 ,自减运算也是地址运算
m = * p ++ 等价于 m = *(p ++)
取指针 p 当前所指变量的值赋给变量 m ; p 做加 1 运算 , 指向下一个目标变量 .
m = * ++ p 等价于 m = * ( ++ p)
p 做加 1 运算 , 指向下一个目标变量 ; 取指针 p 当前所指变量的值赋给变量 m .
m = (*p)++ 与 m = ++(*p)
前者是将指针 p 所指的变量的值赋给变量 m , 然后变量 *p 自加 1 ;
后者是将指针 p 所指的变量 *p 的值自加 1 后赋给变量 m .
四 :指针间的减法运算 :
指向同一组类型相同数据的指针之间可以进行减法运算 , 相减的结果表示两指针间相距的数据的个数 .
五 :指针的关系运算 :
p , q 指向同一个数组 , p > q 表示p 是否指向 q 所指位置的后面 , 若成立 则 表达式的值为 非 0 , 否则为 0 .
六 :指针的下标运算 :
p[i] = *(p + i) ;