博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
指针数组/数组指针
阅读量:5943 次
发布时间:2019-06-19

本文共 1014 字,大约阅读时间需要 3 分钟。

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<<"\tA = "<
<
上面几行代码输出结果应该是什么呢?,首先arrayPoint是一个指针,指向一个存放4个字符的C风格字符串,从这里我们能够知道arrayPoint事实上是一个32位(一般)的整数,全部下一步我们要将一个长度为4的字符串地址赋给该指针,即arrayPoint=&t;,故可知输出结果就为“123”和字符串t的地址。

转载地址:http://xwwxx.baihongyu.com/

你可能感兴趣的文章
CoinWhiteBook:区块链在慈善事业中的应用
查看>>
Mac上基于Github搭建Hexo博客
查看>>
阿里云服务器ECS开放8080端口
查看>>
Spring中实现监听的方法
查看>>
使用Tooltip会出现一个问题,如果行上出现复选框
查看>>
11.03T1 DP
查看>>
P2924 [USACO08DEC]大栅栏Largest Fence
查看>>
jQuery操作table tr td
查看>>
工作总结:MFC自写排序算法(升序)
查看>>
螺旋队列问题之二
查看>>
扩展运算符和解构赋值的理解
查看>>
手机H5显示一像素的细线
查看>>
Menu 菜单栏
查看>>
Integer跟int的区别(备份回忆)
查看>>
集合解析
查看>>
详解分布式应用程序协调服务Zookeeper
查看>>
软件工程之构建之法
查看>>
UVa 10902
查看>>
Mathf.Sin正弦
查看>>
禁止浏览器缓存js
查看>>