本文介绍了C中可否用void指针配合malloc声明多维数组?为什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
刚才写了一个程序:
#include <stdio.h> #include <stdlib.h> int main(void) { void *ptr1; ptr1 = malloc(2*2*sizeof(int)); //本意是把ptr1作为多维数组,但是不知道如何实现 *((int*)(ptr1+1)) = 1; //这么用个人理解就是把多维数组摊平了在用 printf("%d\n",*((int*)(ptr1+1))); return 0; }那么,是否有办法在不改变 ptr1 的指针类型的前提下(保持void),使ptr[0][1] = 1变得可用,而不需要*((int*)(ptr1+1))这样的写法?个人实在是想不到可以实现的办法,还请大神们赐教
解决方案// 首先声明我也是初学者,只是结合自己所学的知识发表一下见解。 // 指针类型是要靠其基类型(int*的基类型为int)来确定寻址时的偏移量的 // void为空类型应该不可以直接使用你这个写法, // ANSI C使用类型(void*)(指向void的指针)代替(char*)作为通用指针类型。 // 二维数组实际在内存中的位置就是按照一行放完再放下一行的,只是逻辑可以看做二位数组。 // #define M 10 // #define N 10 int (*ptrl)[N]; // 指向有N个元素的一维数组的指针 ptr1 = (int *)malloc(sizeof(int) * M * N); // M为二位数组的行, N为二位数组的列 这样就可以用ptrl[0][0]的方式访问了。(不会排版,比较矬)更多推荐
C中可否用void指针配合malloc声明多维数组?为什么?
发布评论