c – 二维数组名称第一个元素
一天一小时的C编程有这样的引用:
#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指针一样行事).
因为没有任何物理内存分配给那些(实际上甚至不需要),所以在尝试打印时会得到相同的地址.在你的情况下, **为了更好地理解,请看这个(如果你打印它会是这样的) _____ _____ _____ |0x100| --> |0x100| --> |value| 0x100|_____| 0x100|_____| 0x100|_____| m m[0] m[0][0] * value是m [0] [0]的值 这里, *虽然我已经证明0x100包含m100和m [0]的0x100,但是0x100实际上包含m [0] [0]的数据/值,但是如果你做任何操作就是编译器对它们的处理方式. **因此,int * p = malloc(n * sizeof(int))这是可能的,因为p现在占用指向数组起始地址的内存.如果将p视为int const * p,则可以将其视为没有动态分配的普通数组. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |