加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 二维数组名称第一个元素

发布时间:2020-12-16 10:07:50 所属栏目:百科 来源:网络整理
导读:一天一小时的C编程有这样的引用: As with a one-dimensional array,the name of a multidimensional array is a pointer to the first array element. #include stdio.hint m[2][4];int main() { printf("%pn",m); // 1 printf("%pn",(m[0])); // 2 print
一天一小时的C编程有这样的引用:

As with a one-dimensional array,the name of a multidimensional array is a pointer to the first array element.

#include <stdio.h>

int m[2][4];

int main() {
    printf("%pn",m);        // 1
    printf("%pn",&(m[0]));  // 2
    printf("%pn",m[0]);     // 3
    printf("%pn",&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,则可以将其视为没有动态分配的普通数组.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读