C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 二维数组名称第一个元素大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
一天一小时的C编程有这样的引用:

#include <stdio.h>

int m[2][4];

int main() {
    printf("%p\n",m);        // 1
    printf("%p\n",&(m[0]));  // 2
    printf("%p\n",m[0]);     // 3
    printf("%p\n",&m[0][0]); // 4
}

这将为所有语句打印相同的值.根据引用,有意义1 == 2和3 == 4.但我不明白2 == 3. m [0]的地址怎么能与m [0]相同?

解决方法

当分配二维(或任何维度)数组时,它只占用其元素的内存(内存未分配给数组名称或任何其他数组元素,如m [0]和m [1]在您的情况下,像const指针一样行事).

因为没有任何物理内存分配给那些(实际上甚至不需要),所以在尝试打印时会得到相同的地址.在你的情况下,
因为它是一个二维数组,因为m指向m [0],而m [0]又指向m [0] [0],所有这些的取地址将给出相同的值(也适用于m [1]和m [1] ] [0]).

**为了更好地理解,请看这个(如果你打印它会是这样的)

_____         _____         _____
     |0x100|  -->  |0x100|  -->  |value|
0x100|_____|  0x100|_____|  0x100|_____|
       m            m[0]         m[0][0]

* value是m [0] [0]的值

这里,
  m和m [0]就像指针一样,但没有物理实现(不占用内存),编译器处理如何处理它们.

*虽然我已经证明0x100包含m100和m [0]的0x100,但是0x100实际上包含m [0] [0]的数据/值,但是如果你做任何操作就是编译器对它们的处理方式.

**因此,int * p = malloc(n * sizeof(int))这是可能的,因为p现在占用指向数组起始地址的内存.如果将p视为int const * p,则可以将其视为没有动态分配的普通数组.

大佬总结

以上是大佬教程为你收集整理的c – 二维数组名称第一个元素全部内容,希望文章能够帮你解决c – 二维数组名称第一个元素所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: