zoukankan      html  css  js  c++  java
  • 《C与指针》读书笔记

    第六章

    6.1.  内存和地址

    获得一个值的地址,就能根据这个地址获得这个值,但如果编程时直接使用地址访问值,是非常繁琐的,所以高级语言使用名字而非地址访问内存的位置,这些名字就是我们编程者所使用的变量。变量名和内存位置之间的关联是编译器提供的,为编程者所使用。而电脑硬件依旧使用地址访问内存位置。

    6.4. 间接访问操作符

    通过指针访问他所指向的内存地址称为“间接访问”或“解引用指针”,用于进行间接访问的操作符是单目运算符*。

    比如指针p的值是100,即它储存的地址(指向的地址)是100,对p使用间接访问操作符*时,就是访问内存地址100并察看那里存放的值。如果内存100存放的值是112,那么*p 就等于112.

     

    6.6. NULL指针

    NULL指针作为一个特殊的指针变量,表示不指向任何东西。注意NULL是一个指针变量而不是一个值。要使得一个指针成为NULL指针,可以赋值以0.

    对指针进行解引用操作(即“*”)可以获得他所指向的值,但NULL指针并不指向任何东西,因此对NULL进行解引用操作是非法的(但机器未必会做出提醒),在对指针进行解引用操作时必须判断它是否为NULL指针。

    6.8. 指针、间接访问和变量

    &a是变量a的地址,是一个指针常量。对于指令*&a = 25,先通过&获得a的地址,再对a的地址进行解引用操作,并赋值25,实际上等效于a = 25.

    6.9. 指针常量

    假设变量a的地址是100,那么语句*100 = 25的功能是什么?把25赋值给a?

    这是错误的!这条语句实际上是非法的,因为编译器会把“100”看做是一个普通的整型数值而非一个地址!而间接访问操作符*只能用于指针类型表达式身上。如果确实像把25存储到地址100中(实际上是储存到以地址100为开端的一片内存区域中,这片内存区域的大小视乎“25”所属的数值类型,比如25为int型的话,就是4),就要进行强制类型转换。以下指令是合法的。

    *(int*)100 =  25;

    上述语句将100由“整型”转为“指向整型的指针”,这样对它进行间接访问就是合法的了。

                                                                                                                              >>未完

  • 相关阅读:
    与DSP通信时,RD&WR信号
    4.2.1 Vector bit-select and part-select addressing
    数据校验
    数据结构 (树,图)
    ASOP编译说明
    os
    20180203-增与查
    yum安装MariaDB
    20180202之engine,URL,base,session
    列表
  • 原文地址:https://www.cnblogs.com/cszlg/p/2910454.html
Copyright © 2011-2022 走看看