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由“整型”转为“指向整型的指针”,这样对它进行间接访问就是合法的了。

                                                                                                                              >>未完

  • 相关阅读:
    leetcode701. Insert into a Binary Search Tree
    leetcode 958. Check Completeness of a Binary Tree 判断是否是完全二叉树 、222. Count Complete Tree Nodes
    leetcode 110. Balanced Binary Tree
    leetcode 104. Maximum Depth of Binary Tree 111. Minimum Depth of Binary Tree
    二叉树
    leetcode 124. Binary Tree Maximum Path Sum 、543. Diameter of Binary Tree(直径)
    5. Longest Palindromic Substring
    128. Longest Consecutive Sequence
    Mac OS下Android Studio的Java not found问题,androidfound
    安卓 AsyncHttpClient
  • 原文地址:https://www.cnblogs.com/cszlg/p/2910454.html
Copyright © 2011-2022 走看看