从键盘输入行数m,列数n,从堆上动态分配一个m行,n列的int型二维数组,并从键盘
来源:互联网 发布:js 正则匹配 编辑:程序博客网 时间:2024/05/17 05:55
这是今天在百度知道上看到的问题,一开始感觉很简单,就感觉没有难度只是scanf,printf之类的,后来实在是无聊就想着回答一下吧,但是当我回答的时候发现这道题并不是那么简单,他需要对内存理解的很透彻的情况下才可以做出来,首先第一个难点在于他是动态的二维数组,我想了第一个解决办法是这样的
#include "stdio.h"#include "stdlib.h" int main(){ int m,n,i,j; int **a; scanf("%d",&m); scanf("%d",&n); a = (int **)malloc((m + n) * sizeof(int)); for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { scanf("%d", a + i * n + j); } } for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { printf("%d ", *(a + i * n + j)); } printf("\n"); } system("pause");}
后来经过思考后发现不太合适,至少不合适他说的m行n列,后来又想到了另外一个方法如下
#include "stdio.h"#include "stdlib.h"int main(){int m,n,i,j;int **a;scanf("%d",&m);scanf("%d",&n);// 申请m个指向整形指针(其实指针和数组名是一样的,只不过数组名是固定大小内存块的起始位置// 但指针的内存大小还没有确定)的指针,也就是m行 a = (int **)malloc(m * sizeof(int *));for (i = 0; i < m; i++){// 为每一行分配n列的内存空间a[i] = (int *)malloc(n * sizeof(int));for (j = 0; j < n; j++){scanf("%d", &a[i][j]);}}for (i = 0; i < m; i++){for (j = 0; j < n; j++){printf("%d", a[i][j]);}printf("\n");}system("pause");}
0 0
- 从键盘输入行数m,列数n,从堆上动态分配一个m行,n列的int型二维数组,并从键盘
- 常见面试题:二维递增数组的快速查找,复杂度(M+N-2),M,N分别为数组的行数和列数
- 用Java转换n行m列的二维数组转换为m行n列的数组输出
- python 把一个m*n的二维矩阵转换成一个m*n行,三列的列表
- Java中从m个数中随机选取n个不同的数(m>=n),并进行排序
- python创建n行m列数组
- 从M个数中选择前N大的数
- 从n中取出m个不重复的数
- 从长度为M的无序数组中找出N个最大的数
- Fibonacci从m-n输出
- 输出从m到n的值、
- 找出这个图形的规律,并输出一个n行m列的图形
- C语言:从键盘输入一个数n,求n的阶乘(n!)
- 显示从N行到M行
- 取从M到N行
- 从一个长度为n的数组中随机选择m个数
- 互换二维数组的行列。要求数组的行数、列数以及各元素均从键盘输入;输出互换前数组内容和互换后数组内容。(要求循环输入进行测试)Java
- 写一个函数,使给定的一个二维数组(NXM)(N=M)转置,即行列互换(要求不额外创建二维数组)
- 产生随机数的两种方法
- 新手必备的常用代码片段整理(一)
- dp sp px 转换
- vs插件Document Map
- 手机通话的状态
- 从键盘输入行数m,列数n,从堆上动态分配一个m行,n列的int型二维数组,并从键盘
- 深入理解CSS中的层叠上下文和层叠顺序
- 详解 MySQL 中的 explain
- iOS 6 开发进阶与实践----第14章 保持界面响应
- error LNK2005: "private: __thiscall type_info::type_info(class&n
- 6.2、Android Studio内存
- torch7学习(一)——Tensor
- byte取值范围原因简介 -128~127
- CrackingtheCodeInterview之数组与字符串