一维数组和二位数组基类型我看不懂,好米糊
有没有朋友能用简单方式说一下一维数组和二维数组的基类型{:10_257:} 额,你就把数组当指针看,然后去掉最后一个 比如 int** p 基类型为 int*,int* q[] 基类型也是 int*。 话说,基类型这个概念就不是很明确{:5_94:} 永恒的蓝色梦想 发表于 2020-8-13 22:26额,你就把数组当指针看,然后去掉最后一个
数组和指针除了在当作函数参数的时候才能等价看吧;
其他时候就谈不上等价了,单单是内存方面就会带来很多问题 CodingCat_k 发表于 2020-8-13 22:31
数组和指针除了在当作函数参数的时候才能等价看吧;
其他时候就谈不上等价了,单单是内存方面就会带来很 ...
是的,问题是基类型这个概念本身也不明确啊{:10_277:} 本帖最后由 崔铭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吗 崔铭1315 发表于 2020-8-13 22:34
先给出定义 *p,a;
二维数组地址五种表达式
(1)&a
请使用代码格式发布。 永恒的蓝色梦想 发表于 2020-8-13 22:28
话说,基类型这个概念就不是很明确
我看的书上说的太概念,绕的我看不懂了{:10_266:} 崔铭1315 发表于 2020-8-13 22:34
先给出定义 *p,a;
二维数组地址五种表达式
(1)&a
为什么a,a中的常量1的单位是2个字节大哥我求求你了,麻烦你把话说清楚,你每次提问说的话也很 “米糊”{:10_266:} CodingCat_k 发表于 2020-8-13 22:31
数组和指针除了在当作函数参数的时候才能等价看吧;
其他时候就谈不上等价了,单单是内存方面就会带来很 ...
数组名不是可以看成地址常量,也可以看成指针变量,我有点晕{:10_258:} 崔铭1315 发表于 2020-8-13 22:37
数组名不是可以看成地址常量,也可以看成指针变量,我有点晕
数组名就是一个常量,不可修改的左值,因此也不可以进行数组间的赋值;
数组名代表着一个数组的起始地址(首元素地址),
地址值在计算机内存中是固定的,试想一下,要是内存地址值为变量,那数据存储怎么进行?
指针变量是用来存储地址值的变量,其本身也有一个内存地址(起始内存单元首地址)以及用于存储数据的一定的内存空间 永恒的蓝色梦想 发表于 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没区别吗 崔铭1315 发表于 2020-8-13 22:53
先给出定义:
*p,a;
二维数组元素的地址
请使用代码格式发布! a是个二维数组,它的解读也可以说成含i个元素的一维数组,数组中的每个元素为一个有j个元素的数组。
所以a表示的是a的地址(同时是数组的地址),步长为j*基本元素类型字节,
但是注意,a为a的首元素,它的地址与a一致的,且与a一致(即&a == &a == &a)
避坑点:&a代表的是一个数组的地址,&a+1即偏移一整个数组步长的内存单元 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没区别吗 崔铭1315 发表于 2020-8-13 23:01
先给出定义:
*p,a;
二维数组元素的地址
i 又从哪啊?自己不检查? 多维数组这个在C/C++里面也确实是个迷惑最多的地方,浅尝则可,前期不必要花太大功夫去整,如果想了解更多,参考书目《C与指针》 CodingCat_k 发表于 2020-8-13 23:05
多维数组这个在C/C++里面也确实是个迷惑最多的地方,浅尝则可,前期不必要花太大功夫去整,如果想了解更多 ...
好的书已经买了,我后天自己看看 永恒的蓝色梦想 发表于 2020-8-13 23:05
i 又从哪啊?自己不检查?
老师,我这本书数组这章页数有点多,推的我有点迷糊了,下次提出问题,我一定说明白了,这次我自己在研究研究。{:10_281:}
页:
[1]
2