崔铭1315 发表于 2020-8-13 22:23:10

一维数组和二位数组基类型我看不懂,好米糊

有没有朋友能用简单方式说一下一维数组和二维数组的基类型{:10_257:}

永恒的蓝色梦想 发表于 2020-8-13 22:26:10

额,你就把数组当指针看,然后去掉最后一个

永恒的蓝色梦想 发表于 2020-8-13 22:27:15

比如 int** p 基类型为 int*,int* q[] 基类型也是 int*。

永恒的蓝色梦想 发表于 2020-8-13 22:28:17

话说,基类型这个概念就不是很明确{:5_94:}

CodingCat_k 发表于 2020-8-13 22:31:54

永恒的蓝色梦想 发表于 2020-8-13 22:26
额,你就把数组当指针看,然后去掉最后一个

数组和指针除了在当作函数参数的时候才能等价看吧;
其他时候就谈不上等价了,单单是内存方面就会带来很多问题

永恒的蓝色梦想 发表于 2020-8-13 22:33:59

CodingCat_k 发表于 2020-8-13 22:31
数组和指针除了在当作函数参数的时候才能等价看吧;
其他时候就谈不上等价了,单单是内存方面就会带来很 ...

是的,问题是基类型这个概念本身也不明确啊{:10_277:}

崔铭1315 发表于 2020-8-13 22:34:00

本帖最后由 崔铭1315 于 2020-8-13 22:36 编辑

永恒的蓝色梦想 发表于 2020-8-13 22:26
额,你就把数组当指针看,然后去掉最后一个

先给出定义 *p,a;
二维数组地址五种表达式
(1)&a
(2)a+j
(3)*(a+j)+j
(4)&a+4*i+j
(5)a+4*i+j
为什么 a,a中的常量1的单位是2个字节,为什么a+4*i+j不行,a不是相当与a吗

永恒的蓝色梦想 发表于 2020-8-13 22:34:23

崔铭1315 发表于 2020-8-13 22:34
先给出定义 *p,a;
二维数组地址五种表达式
(1)&a


请使用代码格式发布。

崔铭1315 发表于 2020-8-13 22:35:16

永恒的蓝色梦想 发表于 2020-8-13 22:28
话说,基类型这个概念就不是很明确

我看的书上说的太概念,绕的我看不懂了{:10_266:}

永恒的蓝色梦想 发表于 2020-8-13 22:37:31

崔铭1315 发表于 2020-8-13 22:34
先给出定义 *p,a;
二维数组地址五种表达式
(1)&a


为什么a,a中的常量1的单位是2个字节大哥我求求你了,麻烦你把话说清楚,你每次提问说的话也很 “米糊”{:10_266:}

崔铭1315 发表于 2020-8-13 22:37:46

CodingCat_k 发表于 2020-8-13 22:31
数组和指针除了在当作函数参数的时候才能等价看吧;
其他时候就谈不上等价了,单单是内存方面就会带来很 ...

数组名不是可以看成地址常量,也可以看成指针变量,我有点晕{:10_258:}

CodingCat_k 发表于 2020-8-13 22:44:02

崔铭1315 发表于 2020-8-13 22:37
数组名不是可以看成地址常量,也可以看成指针变量,我有点晕

数组名就是一个常量,不可修改的左值,因此也不可以进行数组间的赋值;
数组名代表着一个数组的起始地址(首元素地址),
地址值在计算机内存中是固定的,试想一下,要是内存地址值为变量,那数据存储怎么进行?
指针变量是用来存储地址值的变量,其本身也有一个内存地址(起始内存单元首地址)以及用于存储数据的一定的内存空间

崔铭1315 发表于 2020-8-13 22:53:03

永恒的蓝色梦想 发表于 2020-8-13 22:37
大哥我求求你了,麻烦你把话说清楚,你每次提问说的话也很 “米糊”

先给出定义:
*p,a;
二维数组元素的地址
二维数组元素的地址可以由表达式&a求得,也可以通过每行得首地址来表示。以上
二维数组a中,每个元素得地址可以通过每行的首地址:a,a,a表示。如:地址
&a可以用a+0来表示,地址&a可以用a+1来表示;若0<=i<3,0<=j<4,
则a的地址可用以下五种表达式求得:
(1)&a
(2)a+j
(3)*(a+j)+j
(4)&a+4*i+j
(5)a+4*i+j
在以上表达式中,a,&a,a的基类型都是int类型,系统将自动据此来确定表达式中
常数1的单位是2个字节。但是不可以把求a地址的表达式写成:a+4*i+j,因为a的基类型
是4个整形元素的数组类型,系统将自动据此来确定常量1的单位是8个字节。


不理解
int为啥是2字节,还有a不是和a没区别吗

永恒的蓝色梦想 发表于 2020-8-13 22:58:44

崔铭1315 发表于 2020-8-13 22:53
先给出定义:
*p,a;
二维数组元素的地址


请使用代码格式发布!

CodingCat_k 发表于 2020-8-13 23:01:24

a是个二维数组,它的解读也可以说成含i个元素的一维数组,数组中的每个元素为一个有j个元素的数组。
所以a表示的是a的地址(同时是数组的地址),步长为j*基本元素类型字节,
但是注意,a为a的首元素,它的地址与a一致的,且与a一致(即&a == &a == &a)
避坑点:&a代表的是一个数组的地址,&a+1即偏移一整个数组步长的内存单元

崔铭1315 发表于 2020-8-13 23:01:46

CodingCat_k 发表于 2020-8-13 22:44
数组名就是一个常量,不可修改的左值,因此也不可以进行数组间的赋值;
数组名代表着一个数组的起始地址 ...

先给出定义:
*p,a;
二维数组元素的地址
二维数组元素的地址可以由表达式&a求得,也可以通过每行得首地址来表示。以上
二维数组a中,每个元素得地址可以通过每行的首地址:a,a,a表示。如:地址
&a可以用a+0来表示,地址&a可以用a+1来表示;若0<=i<3,0<=j<4,
则a的地址可用以下五种表达式求得:
(1)&a
(2)a+j
(3)*(a+j)+j
(4)&a+4*i+j
(5)a+4*i+j
在以上表达式中,a,&a,a的基类型都是int类型,系统将自动据此来确定表达式中
常数1的单位是2个字节。但是不可以把求a地址的表达式写成:a+4*i+j,因为a的基类型
是4个整形元素的数组类型,系统将自动据此来确定常量1的单位是8个字节。


不理解
int为啥是2字节,还有a不是和a没区别吗

永恒的蓝色梦想 发表于 2020-8-13 23:05:29

崔铭1315 发表于 2020-8-13 23:01
先给出定义:
*p,a;
二维数组元素的地址


i 又从哪啊?自己不检查?

CodingCat_k 发表于 2020-8-13 23:05:53

多维数组这个在C/C++里面也确实是个迷惑最多的地方,浅尝则可,前期不必要花太大功夫去整,如果想了解更多,参考书目《C与指针》

崔铭1315 发表于 2020-8-13 23:07:36

CodingCat_k 发表于 2020-8-13 23:05
多维数组这个在C/C++里面也确实是个迷惑最多的地方,浅尝则可,前期不必要花太大功夫去整,如果想了解更多 ...

好的书已经买了,我后天自己看看

崔铭1315 发表于 2020-8-13 23:10:40

永恒的蓝色梦想 发表于 2020-8-13 23:05
i 又从哪啊?自己不检查?

老师,我这本书数组这章页数有点多,推的我有点迷糊了,下次提出问题,我一定说明白了,这次我自己在研究研究。{:10_281:}
页: [1] 2
查看完整版本: 一维数组和二位数组基类型我看不懂,好米糊