指针粗浅介绍(1)

一. 指针的两个要素

(一些没什么用,但是必不可少的东西)

  1. 首地址
    注意呀 32位操作系统任何“首地址”(指针)都是4B的!!
  2. 指类(指针(首地址)所指向的内存空间的数据类型)

二. 指针变量的定义及其指类

  1. int p; - -p是int类型的变量,占用四字节的内存空间
  2. int *p; - -p是int * 类型的变量,占用四字节的内存空间,他的指类是int类型
  3. short p; - -p是short类型的变量,占用两字节内存空间
  4. short * p; - - p是short * 类型的变量,p占用四字节内存空间,他的指类是short类型
  5. short **p(二阶指针); - - p是short **类型的变量,p占用四字节空间,他的指类是short*类型

三. &和*

(这里玩一些绕口令游戏)
1. &取地址运算符
(1).&单目运算符,运算符优先级低
(2).不能对常量和表达式进行操作
不能用 && - - 逻辑与运算符,一个双目运算符,也不能&(&i)这样用,因为(&i)是表达式

  • 举个栗子
    int i , *p , * *r;
    i 的类型是int
    p的指类是int
    r的指类是int *
    &p的指类是int *,其本身的类型是 int **

p = &i ; 将 i 空间的首地址赋值给空间 p (p指向i)。这时,i 的类型就是 p 的指类
r = &i ; 将 i 空间的首地址赋值给空间 r (r指向i)
然而,经本人上机验证,这条语句在Dev运行会出现警告,因为r 与 i 的类型不同。得到结论 参与运算的指针的指针类型必须保持一致

2. * 指向运算
(1).*单目运算符,运算优先级与&相同,并且,*与&运算互为逆运算
&*i <=> i ---------------------- *&i <=> i
(2).可以对 指针常量、指针变量、指针表达式进行应用,但是, 不可以值类常量、变量、表达式进行应用。

  • 举个栗子
    单单int *p是错的
    你得
    int i, *p;
    p = &i;
    这样对啦(#^ . ^#)!

  • 绕口令来啦
    记住呀!
    *某,在=左边叫--------“某”所指向的空间
    *某,在=右边叫或者在表达式内--------“某”所指向的空间的值
    *p = **r+*q
    p 所指向的空间
    r 所指向的指针 所指向的空间的值
    q 所指向的空间的值
    来 我们凑一凑即为:
    r 所指向的指针 所指向的空间的值 与 q 所指向的空间的值求和,将和赋值给 p 所指向的空间
    (可以自己随便搞搞 * 瞎玩一下,这里不再多说)

  • 强调一点

变量定义语句中的*,不是指向运算符,是变量为指针类型的说明符!

int *p = &i;
将 i 空间的首地址赋值给 一个int * 类型的变量p

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值