zoukankan      html  css  js  c++  java
  • 指针与数组

    一、指针
        1、 指针==地址;指针有两个值:自身值 与 指向的值
        2、指针的四个方面:     1)  指针的类型
                                            2)  指针指向的类型
                                            3)  指针的值或指针所指向的内存区
                                            4)  指针本身占据的内存区
        3、函数指针不能自加/减,本身的数组名指针也不能自加/减
    二、数组
      数组是把同一类型数据有序进行排列,进行统一存储,是相同类型数据的集合。
      1、特点:他们拥有同一个名称;
      2、应用:在大数量处理和字符串操作时,广泛使用数组。
     三、 指针和数组的特性:
     
    指针
    数组 
    保存数据的地址,任何存入指针变量 p 的数
    据都会被当作地址来处理。 p 本身的地址由
    编译器另外存储,存储在哪里,我们并不知道。
    保存数据,数组名 a 代表的是数组首元素的
    首地址而不是数组的首地址。 &a 才是整个数
    组的首地址。 a 本身的地址由编译器另外存储,存储在哪里,我们并不知道。
    间接访问数据,首先取得指针变量 p 的内容,
    把它作为地址,然后从这个地址提取数据或
    向这个地址写入数据。指针可以以指针的形
    式访问*(p+i);也可以以下标的形式访问 p[i]。
    但其本质都是先取 p 的内容然后加上
    i*sizeof(类型)个 byte 作为数据的真正地址。

    直接访问数据,数组名 a 是整个数组的名字,
    数组内每个元素并没有名字。只能通过“具
    名+匿名”的方式来访问其某个元素,不能把
    数组当一个整体来进行读写操作。数组可以
    以指针的形式访问*(a+i); 也可以以下标的形
    式访问 a[i]。但其本质都是 a 所代表的数组首
    元素的首地址加上 i*sizeof(类型)个 byte 作为
    数据的真正地址
    通常用于动态数据结构

    通常用于存储固定数目且数据类型相同的元
    素。
    相关的函数为 malloc 和 free。  隐式分配和删除
    通常指向匿名数据(当然也可指向具名数据) 自身即为数组名

             

    eg:
    void main()
    {
              int a[5] = { 1, 2, 3, 4, 5 };
              int *ptr = (int *)(&a + 1);//增加了一个数组的长度,即相当于加到了5后边的位置
             printf( "%d ", *(a + 1));//2
             printf( "%d ",*(ptr - 1));//5
    }
    解析:
      1)对指针进行加 1 操作,得到的是下一个元素的地址,而不是原有地址值直接加 1。所以,
    一个类型为 T 的指针的移动,以 sizeof(T) 为移动单位。 因此,对上题来说, a 是一个一
    维数组,数组中有 5 个元素; ptr 是一个 int 型的指针。
          2)&a + 1: 取数组 a 的首地址,该地址的值加上 sizeof(a) 的值,即 &a + 5*sizeof(int),也
    就是下一个数组的首地址,显然当前指针已经越过了数组的界限。
          3)(int *)(&a+1): 则是把上一步计算出来的地址,强制转换为 int * 类型,赋值给 ptr。
          4)*(a+1):在数值上 a,&a 的值是一样的,但意思不一样, a 是数组首元素的首地址,也就是 a[0]的
    首地址, &a 是数组的首地址, a+1 是数组下一元素的首地址,即 a[1]的首地址,&a+1 是下一
    个数组的首地址。
      5)*(ptr-1): 因为 ptr 是指向 a[5],并且 ptr 是 int * 类型,所以 *(ptr-1) 是指向 a[4] 
  • 相关阅读:
    Educational Codeforces Round 67 D. Subarray Sorting
    2019 Multi-University Training Contest 5
    Educational Codeforces Round 69 (Rated for Div. 2) E. Culture Code
    Educational Codeforces Round 69 D. Yet Another Subarray Problem
    2019牛客暑期多校训练第六场
    Educational Codeforces Round 68 E. Count The Rectangles
    2019牛客多校第五场题解
    2019 Multi-University Training Contest 3
    2019 Multi-University Training Contest 2
    [模板] 三维偏序
  • 原文地址:https://www.cnblogs.com/hanxiaoyu/p/5387705.html
Copyright © 2011-2022 走看看