二维数组,满足所有二维数组访问的方法,而且内存利用效率高,程序性能好。这样一种分配方法要理解的是一下一点概念:体会,只要是指针都可以带不管使直接指针,还是间接指针都可以用下标,只要使指针就可以了,这个很关键;另外就是要明白void的指针是不能够用于加减法的,因为系统不晓得一个void型的大小,但是void指针却是可以进行加减法,进行指针偏移的因为void型大小使知道的,所以,编译器使可以计算出偏移地址的。由于void型,系统不晓得大小,所以,voidpvoidmalloc3编译器无法通过如voidqp3我们知道假设一个整型变量
Co
t在32位机器上是4个字节,q是指向
Co
t的指针变量,q的值,也就是
Co
t的地址是0x00032ec0那么q1的值为0x0x00032ec014这是C语言中计算指针表达式值的方法。即q1的值为q1sizeofi
t从这里,我们可以理解为什么我们用void作为动态分配内存函数返回的类型,因为,如果返回的是void类型,我们无法计算地址的偏移量,即无法计算出数组首元素的地址,也就是数组的地址。当然,我们可以不用void可以用除了void的任何C中内嵌的简单类型,不过如果考虑使用起来简单,方便,那么我觉得还是悬着用void或者char选择char类型方便的是,char类型的大小是1那么元素的个数,即等于地址的偏移量。
构建实例一维i
cludestdiohi
cludestdlibhi
tmai
i
t
1ii
tarrayputs