大佬教程收集整理的这篇文章主要介绍了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指向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,请注明来意。