‘壹’ 关于c语言多维数组问题
#include<stdio.h>
void main()
{int i,j,k;
int a[2][2][2]={1,2,3,4,5,6,7,8};
for(i=0;i<2;i++)
for(j=0;j<2;j++)
for(k=0;k<2;k++)
printf("%d",a[i][j][k]);
}
‘贰’ 如何动态构建多维数组(c语言)
两种方法:
1.转化为一维数组申请
2.先申请全部行首指针,再按行逐行申请
1.
a=(int *)malloc(sizeof(int),(unsigned)m*n);
使用的时候就和一般的二维数组一样。
举个例子给你:
#include "stdlib.h"
#include "stdio.h"
#include <malloc.h>
int main()
{
int i,j;
int n;//这个就是需要指定的行数
int (*p)[10];
scanf("%d",&n);//取得行数
//动态生成二维数组,指定列数为10,如果想改,自己该里面
的参数,如果想定义n行2列就为: p=(int (*)[2])malloc(n*2*sizeof(int));
p=(int (*)[10])malloc(n*10*sizeof(int)); //动态申请n行10列的二维数组
for(i=0;i<n;i++)
for(j=0;j<10;j++)
p[i][j]=i*j;
for(i=0;i<n;i++)
{
for(j=0;j<10;j++)
printf("%d,",p[i][j]);
printf("\n");
}
free(p);
return 0;
}
2.
这个也给你举个例子吧:
#include <stdio.h>
#include <malloc.h>
main()
{
int i = 0;
int j = 0;
int line = 0;
int row = 0;
int **p = NULL;
printf("input the line of the array:\n");
scanf("%d", &line);
printf("input the row of the array:\n");
scanf("%d", &row);
p = (int **)malloc(sizeof(int *) * line);
if (NULL == p)
{
return;
}
for (i = 0; i < line; i++)
{
*(p + i) = (int *)malloc(sizeof(int) * row);
if (NULL == *(p + i))
{
return;
}
}
/*input data*/
for (i = 0; i < line; i++)
{
for(j = 0; j < row; j++)
{
p[i][j] = i + 1;
}
}
/*output data*/
for (i = 0; i < line; i++)
{
for(j = 0; j < row; j++)
{
printf("%d", p[i][j]);
}
}
/*free every line point*/
for (i = 0; i < line; i++)
{
free(*(p + i));
p[i] = NULL;
}
free(p);
p = NULL;
}
第一种方法数组创建和释放都比较简单
‘叁’ C语言如何创建多维数组
什么意思?
能具体点吗?
其实,和一维的不是一样的嘛,
多维的,就是将一维的,比如,你建一个一维的长12的整型数组,
完全可以看成是长3宽4的二维数组啊,
如果你想实现动态的话,我想到有二种方法,
一种,你用宏弄一个比较大的数组,然后用变量来标其有效部分.
另一种,可以根据你所要创建的大小动态的malloc.这个,就要先了解要建的大小.如果重新建的话,要free原来的,新分配新的空间.
‘肆’ C语言 多维数组的问题 新手 数组学的很模糊 请大神详解
楼主你好,board是一个二维数组,你得了解board[3]是一个指向数组的数组,然后board的数组名就是一个指向数组的数组的首地址,你取它的地址就是board[0]的地址,推荐你看下《C和指针》,毕竟这些是一连串的知识
‘伍’ C语言中怎样把一个多维数组排序
同意一楼方法,讲二维数组存到一维数组中,然后用qsort排序,再存到二维数组当中
代码敲了一下,发现C语言快忘光了
#include <stdio.h>
#include <stdlib.h>
int comp(const void *a , const void *b){
return *(int *)b - *(int *)a; //这是b-a,如果是a-b就是从小到大排序
}
int main(){
int a[3][3];
int b[9];
int n;
int i , j , k;
for(i = 0 , k = 0; i < 3 ; i ++)
for(j = 0 ; j < 3 ; j ++){
scanf("%d",&a[i][j]);
b[k++] = a[i][j]; // k ++别看漏
}
qsort(b,9,sizeof(int),comp);//qsort函数很简单的,看看就会,不怕麻烦,comp函数是指定排序是从小到大还是从大到小
for(i = 0 , k = 0; i < 3 ; i ++)
for(j = 0 ; j < 3 ; j ++){
a[i][j] = b[k++];
printf("%d",a[i][j]);
}
system("pause");
return 0;
}
qsort看不懂再给你个网络的链接
http://ke..com/view/982231.htm
自己再敲一次吧,代码是敲出来的,多练练
ps:那个int n是多余的,你的代码测试了,可以
‘陆’ 求C语言关于多维数组的详细讲解,急!!!
每一个[]代表一个方向 当然三维以上的数组不太容易用实体模式想象 但大概方式是一样的
先搞明白1 2 3维对应于下标的方式 指针 地址的对应关系
比如对于int a[2][3][4]而言
a[1] a[1][1] a[1][1][1] a[1][1][3] a[1][2][0]
搞清以上几项的地址关系
组数基本我们可以按行读来理解[具体对应于代码]
即 1维 从左向右读
2维 a[2][3] 从左向右工a[][0]~a[][2] 3格 成为一行 每一行对应一个a[]
三维a[4][2][3]的在此基础上增加到4个层面 (原来的2维对应为2*3格的一个面)
‘柒’ C语言中如何用多维数组实现输入一个班30名学生的姓名,学号和5门成绩
#include "stdio.h"
#define N 100
void main()
{
char stu_name[N][20]={""};
char stu_id[N][10]={""};
float stu_score[N][5]={0.0};
int stu_num=0;
int i,j;
printf("Please input the number of class:n=");
scanf("%d",&stu_num);
printf("Please input student's information:\n");
for(i=0;i<stu_num;i++)
{
printf("请输入第%d位学生信息:\n",i+1);
printf("Please input Name:");
getchar();
gets(stu_name[i]);
printf("Please input ID:");
getchar();
gets(stu_id[i]);
for(j=0;j<5;j++)
{
printf("请输入第%d门成绩:",j+1);
scanf("%f",&stu_score[i][j]);
}
}
}
‘捌’ c语言三维数组怎么用的
在c语言中,多维数组的存放规律都是第一维下标变化的最慢,越往后维数越高,下标变化越快,例如:对于三位数组a[2][2][2],其赋值顺序就是:
a[0][0][0]
a[0][0][1]
a[0][1][0]
a[0][1][1]
a[1][0][0]
a[1][0][1]
a[1][1][0]
a[1][1][1]
总结的说,就是“维数最高优先存储”
至于什么情况用三维数组,这要看你编程思想了,当你想编的程序抽象成三维的东西,就用三维数组来表示,就如矩阵似的,我们把矩阵看成是一个图,二维的,所以用了二维数组
希望可以帮助你
‘玖’ c语言中的二维数组
C 语言中的多维数组(multidimensional array)其实就是元素为数组的数组。n 维数组的元素是 n-1 维数组。例如,二维数组的每个元素都是一维数组,一维数组的元素当然就不是数组了。
多维数组声明时,每个维度用一对方括号来表示:char screen[10][40][80]; // 一个三维数组
数组 screen 包含 10 个元素,从 screen[0] 到 screen[9]。每个元素又是一个二维数组,它有 40 个元素,这 40 个元素均是一维数组,然后每个一维数组内都有 80 个字符。整体来说,screen 数组有 32000(10×40×80)个 char 类型元素。
想要获取该三维数组 screen 内的某个 char 元素,必须指定 3 个索引值。例如,下面的语句把字符Z写入该数组的最后一个元素位置:screen[9][39][79] = 'Z';