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的地址。
  • 相关阅读:
    hdu acm 2844 Coins 解题报告
    hdu 1963 Investment 解题报告
    codeforces 454B. Little Pony and Sort by Shift 解题报告
    广大暑假训练1 E题 Paid Roads(poj 3411) 解题报告
    hdu acm 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
    hdu acm 1114 Piggy-Bank 解题报告
    poj 2531 Network Saboteur 解题报告
    数据库范式
    ngnix 配置CI框架 与 CI的简单使用
    Vundle的安装
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4481511.html
Copyright © 2011-2022 走看看