当前位置:   article > 正文

c++ 数组指针和指针数组_c++ 指针数组

c++ 指针数组

指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。
数组指针:首先它是一个指针,它指向一个数组。在32 位系统下永远是占4 个字节,

A)
int *p1[10];
B)
int (*p2)[10];    等价于 int (*)[10] p2;

运算符优先级: () > [] > *


“[]”的优先级比“*”要高。p1 先与“[]”结合,构成一个数组的定义,数组名为p1,int *修饰的是数组的内容,即数组的每个元素。那现在我们清楚,这是一个数组,其包含10 个指向int 类型数据的指针,即指针数组。至于p2 就更好理解了,在这里“()”的优先级比“[]”高,“*”号和p2 构成一个指针的定义,指针变量名为p2,int 修饰的是数组的内容,即数组的每个元素。数组在这里并没有名字,是个匿名数组。那现在我们清楚p2 是一个指针,它指向一个包含10 个int 类型数据的数组,即数组指针。

所以 A 是指针数组, B是数组指针。

从数组指针(本质是指针)和数组名延伸到指针和数组的区别,参考:指针和数组、指针常量和常量指针的区别_baidu_16370559的博客-CSDN博客

int a[5] = { 1, 2, 3, 4, 5 }

a和&a的值是一样的,但是意义有所区别,a指的是a[0]的地址,&a指的是数组a的地址(“数组名”代表数组第一个元素的地址,“&数组名”代表的是整个数组的地址)。从而导致a+1和&a+1有了本质的差异。

a+1 = a[0]的地址+sizeof(int);(在第一个元素的地址上便宜一个数组元素的大小,即下一个元素,a[1]的地址。)

&a+1 = 数组a的地址+sizeof(a);(在数组的地址上偏移一个数组的大小,此时sizeof(a)中的a是一个数组,不是一个指针,计算出来是一个数组的大小,不是指针的大小)
 

二维数组和函数

二维数组作为函数的参数,

如int a[3][4] = {(1,1,1,1),(2,2,2,2),(3,3,3,3),};

sum(a,3);

关键是sum申明的原型

1.sum(int (ar*)[4],int size);  // int (ar*)[4]表示的是数组指针

2. sum(int ar[][4],int size);

一维数组作为函数参数,函数的声明

1.void testfunc1(int a[],int nsize);

2.void testfunc11(int *a, int nsize);

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码优化者/article/detail/63140
推荐阅读
相关标签
  

闽ICP备14008679号