zoukankan      html  css  js  c++  java
  • 函数fp()、数组a[i]和箭头符号>的由来

    http://blog.csdn.net/nowdoit/article/details/6145340

    很多事物的由来都是有理由的,现在看似晦涩难解的符号token,背后都是有一段历史!

    1. fp()只是一种简写方式

    fp()是一个函数指针,所以*fp就是该指针指向的函数,所以(*fp)()就是调用该函数的方式。

    也就是 (*fp)() 和 fp() 是同一个意思;

    ANSI C 标准规定允许程序员将上式简写成 fp(),但是要记住,这只是一种简写方式罢了!

    这样的话,在查看定义比较复杂的函数时候,就能容易理解了!比如(*(void(*)()0)()。

    2. 数组a[i]的由来.

    首先我们定义一个数组,a[i];然后定义一个指针,当然类型和a[i]类型一致;

    进行赋值p = a;这句话的含义就是说,将a[i]的首地址赋值给指针p;

    所以就有p是指向数组a中第0个元素的,那么p+1就指向数组a中下标为1的元素;可以这样写,

    p = p+1;也就是p++;其实也就等同于*(a+1)的元素值,以此类推,*(a+i)就表示指向第i个元素;

    这种情况是如此的常用,因此被简记为a[i],表示对a+i的引用!

    实际上,a+i和i+a是一个意思,因此,a[i] 也就 == i[a];是不是很神奇?!

    注:数组a[i]除了用作运算符sizeof(a)之外,这里a表示整个数组的大小;

    其他情况,都是表示数组a中下标为0的元素的指针!

    3.箭头操作符 ->的由来.

    首先我们定义一个结构体,struct COMPLEX *cp;很明显,cp是指向这个结构的指针;

    那我们要想获取这个结构体中的元素,该怎么办呢?

    首先对指针执行间接操作,获得结构;然后用点操作符访问它的成员;

    也就是(*cp).a;之所以加括号,是因为操作符优先级的原因!

    这样写是如此的繁琐,于是C语言提供了一个更为方便的操作符来完成这项工作,也就是箭头操作符->

    它接收两个参数,左侧的参数必须是指向结构的指针!

    注:这样,“.”和“->”这两个符号的区别就一目了然:

    一个是从结构取元素;一个是从指向结构的指针取元素.

  • 相关阅读:
    通过scp拷贝文件时无需交互输入密码
    suse linux安装lrzsz
    shc加密shell脚本
    linux小程序--cmatrix
    linux系统PXE+Kickstart自动安装系统
    升级SSH
    shell生成随机数的几种方法
    django —— MVT模型
    Django学习---笔记一
    python学习--Django虚拟环境搭建
  • 原文地址:https://www.cnblogs.com/balaamwe/p/2315054.html
Copyright © 2011-2022 走看看