栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

C++ 指针与数组

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 指针与数组

数组指针

定义 int (*p)[n];

    由优先级关系,圆括号 () 与方括号 [] 优先级相同,从左至右阅读,则圆括号 () 优先级更高,首先说明了 p 是一个指针。然后得出该指针指向一个一维数组。

    数组长度为 n,则指针总步长为 n。倘若出现二维数组,则 p+1 (p++) 时,要跨过 n 个整型数据的长度。

    如要将一维数组赋给一指针,应这样赋值:

int a[4];
int *p;     //该语句是定义一个数组指针,指向含4个元素的一维数组。
p=a;        //将该一维数组的首地址赋给p,也就是a[0]

    如要将二维数组赋给一指针,应这样赋值:

int a[3][4];
int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。
p=a;        //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
p++;       //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]

注意 ① 数组名是该数组第一个元素的地址,语句“p = a”,左为指针变量(值为地址),右为数组名(第一个元素的地址),故“地址 = 地址”,语句成立。

② 二维数组的指针相较于一维数组要打括号,是因为二维数组本身可看作若干个一维数组为元素的一维数组。指针指向的地址类型要和二维数组内含的元素地址类型相同(即二维数组元素为长度是4的一维数组时,一个指针指向4个内存空间的地址,所以该指针要声明时包含内存空间长度【即步长】)((((其实我也不是特别懂,希望有人能指正))))

指针数组

定义 int *p[n];

   由优先级关系,方括号 [] 优先级在一级,先与 p 结合成为一个数组,再由 int* 说明这是一个整型指针数组,它有 n 个指针类型的数组元素。

    如此定义的情况下,当执行 p+1 (p++) 时,只向前移动 1 个步长,指向下一个数组元素。

注意 不可使用 p = a 的赋值方式,p[n] 作为指针数组是一个含有 n 个指针的数组,本质上为指针,应该指向一个变量的地址。这样的赋值方式出现了“地址 = 值”的错误。

正确写法 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。

如要将二维数组赋给一指针数组,应这样赋值:

int *p[3];
int a[3][4];
p++; //该语句表示p数组指向下一个数组元素。注:此数组每一个元素都是一个指针
for(i=0;i<3;i++)
  p[i]=a[i]

    这里int *p[3] 表示一个一维数组内存放着三个指针变量,分别是p[0]、p[1]、p[2]
所以要分别赋值。

部分来源:数组指针和指针数组的区别 - jack_Meng - 博客园 (cnblogs.com)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/301268.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号