2019-05-09(*(p). 与 -> 与 &
参考: c primer plus p270 、p443 及 p451
* :间接运算符(indirection operator)
该运算符有时候也称为 解引用运算符号 (dereferencing operator)
var = *p ; //找出p 指向地址保存的值
p = &bat //p为指向bat所在地址的指针 & 为地址符
var = *p , p = &bat < == >等价于 bat= var // bat 与 var 所在地址相同 保存的值也相同(间接运算符的由来)
& 地址运算符
假设 指针变量 p :
p = &pooth // 把pooth的地址赋给 p;也可以说 p指向 pooth 区别是 p是变量 而 &是常量
如果原来 pooth的值 为 m ,将 *p = b; 也就是将指针所指的地址的值改变 :此时pooth的值也就发生了改变;
参考: c primer plus p306
.(点):访问结构成员
使用结构成员运算符-----(.)点 访问结构中的成员 library.value点相当于数组中array[ n ]中的下标 n .
用指针访问成员
->
例子:
him == &barney 那么him ->income 即是 barney.income
him == &fellow[0] 那么 him -> income 即是 fellow[0].income
him == fellow[0] 与 him == &fellow[0] 看出 * 与 & 是互逆的
所以有 ( * him).income == follow[0].income == him->income
(.的优先级比高所以括号 , him 是指向guy类型的barney( barney为 guy类型 ))
这里和 严版数据结构 中 用 c 混 c++ 格式的描述方式 是可以呼应的
InitStack(SqStack &S){
S.base = malloc....(S相当于 fellow[0,1,2,3.....])
}
参考 him 的两个例子 运算符后面的结构指针 和 .运算符号 后面的 结构名 工作方式一样( 不能 him.income 因为him不是结构名)
与上面强调 him 是一个指针(是一个变量) 而 &barney是一个常量
这里着重理解 him 是一个指针 him->barnery是该指针指向结构的一个成员;