鱼C论坛

 找回密码
 立即注册
查看: 1734|回复: 7

[已解决]关于数组指针和指针数组的问题

[复制链接]
发表于 2019-1-14 09:51:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
数组指针是 类似  int(*p) [数字],还是int *p [数字]??

有什么好的方法区分吗??
最佳答案
2019-1-15 15:42:33
1809228982 发表于 2019-1-15 11:12
就是两者所存储的数据分别是什么呢?

首先你得明白数组和指针的概念
数组在内存中是一段连续的空间,数据在其中依次储存,比如
int a[10];便是你在内存中申请了一段长度为(4x10=40)个字节的连续空间,用来储存整型变量。
而像a[4]=3这种访问的方法,便是访问数组的首地址偏移(4x4=16)个字节的那个整数;

而指针也是一种数据类型,和int,char一样
不同只是它存储的是一个地址,
不管是整形指针,浮点指针,还是什么乱七八糟的指针,都是统一的,它说储存的都是长度4个或8个字节(根据32位还是64位的不同)的地址;

所以问题就很明确了
数组指针里存储的数据是一个地址,
而指针数组是一段连续的数据,里面依次储存了多个地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-14 10:20:05 | 显示全部楼层
本帖最后由 Croper 于 2019-1-14 10:28 编辑
int (*p)[2]; //这是数组指针;
int *q[2]; //这是指针数组;

其实这就是一个运算优先级问题,[]比*优先;
如果要记的话你可以认为数组指针相比指针数组不常用,所以它的写法要麻烦些。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-14 11:08:42 | 显示全部楼层
有,牢记运算符的优先级
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-15 11:12:14 | 显示全部楼层
Croper 发表于 2019-1-14 10:20
其实这就是一个运算优先级问题,[]比*优先;
如果要记的话你可以认为数组指针相比指针数组不常用,所 ...

就是两者所存储的数据分别是什么呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-15 11:20:52 | 显示全部楼层
1809228982 发表于 2019-1-15 11:12
就是两者所存储的数据分别是什么呢?

int(*p) [数字]是数组指针,指向的是数组首地址,代表的是数组。所以你可以使用(*p)[1]来替代数组的表示。如
int array[3]={0,1,2};
int (*p)=array;
使用(*p1)[1]和array[1]都是第二个元素1;

int *p [数字]代表的是指针数组,就是如p[0]里面放的元素是一个指针int*(就是一个int的地址),再解引用将会指向的是另外一个int。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-15 15:42:33 | 显示全部楼层    本楼为最佳答案   
1809228982 发表于 2019-1-15 11:12
就是两者所存储的数据分别是什么呢?

首先你得明白数组和指针的概念
数组在内存中是一段连续的空间,数据在其中依次储存,比如
int a[10];便是你在内存中申请了一段长度为(4x10=40)个字节的连续空间,用来储存整型变量。
而像a[4]=3这种访问的方法,便是访问数组的首地址偏移(4x4=16)个字节的那个整数;

而指针也是一种数据类型,和int,char一样
不同只是它存储的是一个地址,
不管是整形指针,浮点指针,还是什么乱七八糟的指针,都是统一的,它说储存的都是长度4个或8个字节(根据32位还是64位的不同)的地址;

所以问题就很明确了
数组指针里存储的数据是一个地址,
而指针数组是一段连续的数据,里面依次储存了多个地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-16 12:27:11 | 显示全部楼层
Croper 发表于 2019-1-15 15:42
首先你得明白数组和指针的概念
数组在内存中是一段连续的空间,数据在其中依次储存,比如
int a[10]; ...

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-16 12:28:29 | 显示全部楼层
行客 发表于 2019-1-15 11:20
int(*p) [数字]是数组指针,指向的是数组首地址,代表的是数组。所以你可以使用(*p)[1]来替代数组的表示 ...

感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 04:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表