C中可否用void指针配合malloc声明多维数组?为什么?

编程入门 行业动态 更新时间:2024-10-25 18:24:22
本文介绍了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声明多维数组?为什么?

本文发布于:2023-07-31 15:39:13,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1259999.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多维   数组   指针   声明   void

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!