1809228982 发表于 2019-1-14 09:51:35

关于数组指针和指针数组的问题

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

有什么好的方法区分吗??

Croper 发表于 2019-1-14 10:20:05

本帖最后由 Croper 于 2019-1-14 10:28 编辑

int (*p); //这是数组指针;
int *q; //这是指针数组;

其实这就是一个运算优先级问题,[]比*优先;
如果要记的话你可以认为数组指针相比指针数组不常用,所以它的写法要麻烦些。。

BngThea 发表于 2019-1-14 11:08:42

有,牢记运算符的优先级

1809228982 发表于 2019-1-15 11:12:14

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

就是两者所存储的数据分别是什么呢?

行客 发表于 2019-1-15 11:20:52

1809228982 发表于 2019-1-15 11:12
就是两者所存储的数据分别是什么呢?

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

int *p [数字]代表的是指针数组,就是如p里面放的元素是一个指针int*(就是一个int的地址),再解引用将会指向的是另外一个int。

Croper 发表于 2019-1-15 15:42:33

1809228982 发表于 2019-1-15 11:12
就是两者所存储的数据分别是什么呢?

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

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

所以问题就很明确了
数组指针里存储的数据是一个地址,
而指针数组是一段连续的数据,里面依次储存了多个地址

1809228982 发表于 2019-1-16 12:27:11

Croper 发表于 2019-1-15 15:42
首先你得明白数组和指针的概念
数组在内存中是一段连续的空间,数据在其中依次储存,比如
int a; ...

谢谢

1809228982 发表于 2019-1-16 12:28:29

行客 发表于 2019-1-15 11:20
int(*p) [数字]是数组指针,指向的是数组首地址,代表的是数组。所以你可以使用(*p)来替代数组的表示 ...

感谢
页: [1]
查看完整版本: 关于数组指针和指针数组的问题