• 指针数组/数组指针


    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的地址。
  • 相关阅读:
    转载:c++内存泄露机制
    推荐一款不错的dialog小工具:artDialog
    写的一些推广方法 拿出来分享下
    struts2标签具体解释
    父亲节:再见,总有一天
    Hadoop是什么
    熊猫烟花集团完美见证异速联远程接入系统
    OpenStack Networking
    管道(Pipe)/createPipe
    百度2014校园招聘算法——给出一组数据A=[a_0, a_1, a-2, ... a_n](当中n可变),打印出该数值元素的全部组合。
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4292777.html
Copyright © 2020-2023  润新知