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

    C/C++中有两个很easy混淆的十分经常使用的可是又特别不引起人注意的两个概念,指针数组和数组指针,也许你已经对这两个概念早有耳闻,可是不知你有没有对他们做过仔细的分析来差别二者呢?

        以下我们来看下百度百科上是怎样对二者进行定义的

        数组指针

      一:数组指针:数组名本身就是一个指针,指向数组的首地址。注意这是声明定长数组时,其数组名指向的数组首地址是常量。而声明数组并使某个指针指向其值指向某个数组的地址(不一定是首地址),指针取值能够改变。
      二:数组指针:是指向数组的一个指针,如int (*p)[10] 表示一个指向10个int元素的数组的一个针。   
       
        指针数组

        一个数组,若其元素均为指针类型数据,称为指针数组。 也就是说,指针数组中每个元素都相当于一个指针变量。其具体形式应该例如以下: *a[0], ...*a[n]. 每个数组里面存储的是其指向的地址;一维指针数组的定义形式为:类型名 *数组名[数组长度]
    比如:int *p[4],因为[]比*优先级更高,因此p先与[4]结合,形成p[4]的形式,这显然是数组形式。然后再与p前面的*结合,*表示此数组是指针类型的,每一个数组元素都指向一个整型变量。
     
        demo:
        从上面的对照分析中我们能够清楚的知道二者的差别,关键就在于*和[]优先级上的问题,以下通过一个样例来分析一下。
     
    声明 char *ponitArray[] = {"stately" , "plump" , "buck" , "mulligan"}; 由定义知这是一个指针数组,那么sizeof(pointArray)=?呢,由于pointArray是一个存放指针的数组,而存放指针事实上存放的是地址,一般用4个字节表示,而数组大小为4,故而结果就为4*4 = 16.
     
    char (*arrayPoint)[4];
    char t[4]="123";
    arrayPoint=&t;
    cout<<"*A = "<<*arrayPoint<<"	A = "<<arrayPoint<<endl;

    上面几行代码输出结果应该是什么呢?,首先arrayPoint是一个指针,指向一个存放4个字符的C风格字符串,从这里我们能够知道arrayPoint事实上是一个32位(一般)的整数,全部下一步我们要将一个长度为4的字符串地址赋给该指针,即arrayPoint=&t;,故可知输出结果就为“123”和字符串t的地址。
  • 相关阅读:
    Page6:关于能控性、能观性、能测性及其判据(1)[Linear System Theory]
    Page5:状态转移矩阵及性质、连续线性系统离散化及其性质[Linear System Theory]
    java线程学习之notify方法和notifyAll方法
    java线程学习之wait方法
    java线程学习之synchronized关键字
    java线程学习之Sleep方法
    java线程学习之线程创建
    用javaScript获取页面元素值
    用javaScript对页面元素进行显示和隐藏
    JDBC工具类
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4008134.html
Copyright © 2011-2022 走看看