C中可否用void指针配合malloc声明多维数组?为什么?
本文介绍了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声明多维数组?为什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文