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] 
  • 相关阅读:
    C语言复习---二维数组和二级指针的关系:没关系,别瞎想(重点)
    数据结构(二)栈与队列---回溯法之八皇后问题
    数据结构(二)栈与队列---递归之汉罗塔
    数据结构(二)栈与队列---栈的应用(递归和分治思想)
    数据结构(二)栈与队列---队列
    chmod 权限777 是什么意思(Unix和Linux的各种操作系统下)
    C#:基于WMI查询USB设备
    Eclipse中web项目部署至Tomcat步骤
    CSS设置DIV背景色渐变显示
    通过[蜘蛛协议]Robots.txt禁止搜索引擎收录的方法
  • 原文地址:https://www.cnblogs.com/hanxiaoyu/p/5387705.html
Copyright © 2011-2022 走看看