“指向二维数组内元素的指针”和“解引用数组的指针”有什么区别?
一、“指向二维数组内元素的指针”和“解引用数组的指针”的区别
C语言中的二维数组是按行排列的,也就是先存放 a[0] 行,再存放 a[1] 行,最后存放 a[2] 行;每行中的 4 个元素也是依次存放。数组 a 为 int 类型,每个元素占用 4 个字节,整个数组共占用 4×(3×4) = 48 个字节。
C语言允许把一个二维数组分解成多个一维数组来处理。对于数组 a,它可以分解成三个一维数组,即 a[0]、a[1]、a[2]。每一个一维数组又包含了 4 个元素,例如 a[0] 包含 a[0][0]、a[0][1]、a[0][2]、a[0][3]。
解引用执行顺序是:地址移动->解引用。
拿a[2][1]来说,一共有四步,其中包含了两次地址移动,两次解引用,执行顺序是:地址移动->解引用->地址移动->解引用(这里提一句,[]的结合性是左结合的,所以在移动的时候先移动行(名列前茅维)再移动列(第二维)
详细步骤:名列前茅步:在当前维度地址+2,因为a的维度是名列前茅维,所以是名列前茅维地址+2,即行+2
第二步:解引用进入第二维度
第三步:在当前维度地址+1,因为这时已经进入第二维,所以第二维地址+1,即列+1
第四步:解引用得到元素的值
延伸阅读:
二、一维数组中指针数组和数组指针的区别
指针数组:
1 int *p[5];
[]的优先级比*高,首先它是一个数组,它的大小是5,它里面存放的数据类型是int *,也就是整型指针。 所以它叫指针数组,讲到底这个p是一个数组,数组内的元素是5个指针,而数组内的每一个指针指向一个int型的变量
数组的指针:
int (*p)[5];
首先p是一个指针,指向大小为5的数组,因此这叫数组的指针,定义了一个指向5个元素的一维数组的指针。(括号优先)
猜你喜欢LIKE
相关推荐HOT
更多>>“指向二维数组内元素的指针”和“解引用数组的指针”有什么区别?
一、“指向二维数组内元素的指针”和“解引用数组的指针”的区别C语言中的二维数组是按行排列的,也就是先存放 a[0] 行,再存放 a[1] 行,最后...详情>>
2023-10-11 22:20:32机器学习、深度学习和强化学习的关系和区别是什么?
一、机器学习、深度学习和强化学习的关系和区别机器学习Maching Learning,是实现人工智能的一种手段,也是目前被认为比较有效的实现人工智能的...详情>>
2023-10-11 20:53:27递推和递归的区别是什么?
一、递推和递归的区别1、从程序上看,递归表现为自己调用自己,递推则没有这样的形式。2、递归是从问题的最终目标出发,逐渐将复杂问题化为简单...详情>>
2023-10-11 20:24:02id选择器和类选择器的区别?
一、id选择器和类选择器的区别1、一个HTML标签只能应用于一个ID选择器。2、一个HTML标签可以应用多个class选择器。3、ID选择器是以“#”开头,...详情>>
2023-10-11 18:37:41热门推荐
易语言中的判断和如果命令有什么区别?
沸“指向二维数组内元素的指针”和“解引用数组的指针”有什么区别?
热网站数据库(oracle、mysql)以及各种编程语言(php、python、perl、lisp)的区别?
热不同环境和语言的正则表达式在使用上有什么区别?
新机器学习、深度学习和强化学习的关系和区别是什么?
递推和递归的区别是什么?
ftp主动模式和被动模式的区别?
group和team的区别?
id选择器和类选择器的区别?
java和c和HTML有什么区别?
Java与JavaScript有什么区别?
Java中的notify和notifyAll有哪些区别?
Java中抽象类和接口有哪些区别?
java微服务和分布式的区别?