zoukankan      html  css  js  c++  java
  • 《c和指针》笔记6

    一维数组

      首先是对于声明的变量的解释,代码如下:

    int a;
    int b[10];

      a是一个标量(原先我也是不晓得为什么叫做标量),因为a是一个单一的值,b是数组,是一些值的集合。数组名是一个指向该数组内第一个元素类型的指针,但是数组跟指针是存在一些区别的。

      1、数组是能确数量的元素。

      2、数组名是常量指针,而指针是一个标量。

      *在作为sizeof操作符和&操作符的操作数时,数组名不用指针常量来表示。

    1 int a[10];
    2 int b[10];
    3 int *c;
    4 ...
    5 c = &a[0];
    6 b = a;
    7 a = c;

      第5行是合法的,c为指向数组a第一个元素的指针,前面我们说到数组名是指向数组内第一个元素的常量指针,因此表达式等于c = a.

      第6行是非法的,因为我们不能直接将一个数组的所有元素复制给另一个数组,必须通过循环对于数组内的元素一个个复制。

      第7也是非法的,因为数组名在表达式中是一个常量指针,常量是不能能被修改的。

    下标引用

    *(a + 3)

      该表达式的结果相当于a[3]。因为a的值是指向整型的指针,对a进行加法运算的结果是a所指向的数组的第一个元素向后移动3个整型长度的位置。

      因此我们可以的得出array[subscript] = *(a + (subscript))。以下有个例子来说明:

    int array[10];
    int *ap = array + 2;
    
    ap == &array[2];//从初始化得出ap是指向数组向后移动2个整型长度的位置
    *ap == *(array + 2) == array[2];
    ap[0] == *(ap + 0) == array[2]//从上一个表达式我们可以推导出来
    ap + 6 == array + 8 == &array[8]//因为ap原本就是指向数组内第3个元素的位置,因此向后移动6个整型长度的位置便是第9个元素的位置
    *ap + 6 == array[2] + 6//这里要注意,因为运算顺序是从右往左的也就是6加上ap间接取址后的值
    *(ap + 6) == array[8]//不解释
    ap[6] == *(ap + 6) == &array[8]//从ap[0]我们可以推导出
    &ap//array没有与之相等的表达式,因为我们不能确定ap相对于array处于何种位置
    ap[-1] == *(ap - 1) == array + (2 - 1) == &array[1]
    ap[9]//按照运算的出应该与array[11]相等 但是已经超出了数组的长度

      

      今天就到这里,明天继续,加油!

  • 相关阅读:
    数据库 MySQL part4
    数据库 MySQL part3
    win64 Python下安装PIL出错解决2.7版本 (3.6版本可以使用)
    Python3.6 安装、后续终端pip 安装模块命令
    Python for循环文件
    Python遍历字典dict的几种方法
    Python 模块xml
    Socket 是嘛玩意儿(简单聊聊)
    Python高阶函数(Map、Reduce、Filter)和lambda函数一起使用 ,三剑客
    异步加载数据
  • 原文地址:https://www.cnblogs.com/ahl5esoft/p/2555573.html
Copyright © 2011-2022 走看看