当前位置:首页 » 编程语言 » c语言十多维数组教学
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言十多维数组教学

发布时间: 2023-01-12 07:18:29

1. c语言如何创建多维数组

什么意思?
能具体点吗?
其实,和一维的不是一样的嘛,
多维的,就是将一维的,比如,你建一个一维的长12的整型数组,
完全可以看成是长3宽4的二维数组啊,
如果你想实现动态的话,我想到有二种方法,
一种,你用宏弄一个比较大的数组,然后用变量来标其有效部分.
另一种,可以根据你所要创建的大小动态的malloc.这个,就要先了解要建的大小.如果重新建的话,要free原来的,新分配新的空间.

2. C语言 代码 求解 多维数组和指针。

首先:
应该明确定义,对于int (*p)[3] 定义,是说:p是一个指针(*p) ,该指针指向了拥有三个元素的数组,(*p)[3] ,数据类型为int,int(*p)[3] 定义完成。(在此说明,应注意C中运算符的优先级. (*p)[3] 和 *p[3] 是有很大区别的)。
其次:
int (*p)[3]=a;目的是将a数组的地址赋予p,即指针p指向了a。
再次:
*(*(p+1)+1))表达式应该分层看。最内层p+1是说"向前指向增加1",因为p是指向了拥有三个元素的数组,所以*(p+1)的实际指向是a中的第3个元素(从0算起)的地址,*(p+1)+1又是向前增加1的指向,即a中的第4个元素,*(*(p+1)+1) 取其值,为5.
第四:
上面解释可以这样看,a[2][3]可以这样理解,它的布局为:
1 2
3 4
5 6
而p指向了a, p 对a的做如下解析:
p -> 1 2 3
(p+1) -> 4 5 6
所以明白了,指针从内存的观点没什么特别的,只是记录了一个地址。p只是记录了a的首地址。至于p定义为int (*p)[3] ,是教编译器如何解释某个内存地址中的内容和大小。

最后,应该说明,在C中实际不存在真实多维数组,都是线性分布于内存中。

3. c语言多维数组

比如a[2][3][4]这个三维数组,你要是画出来的话,他的for循环是三层的。
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
for(k=0;k<4;k++)
}}
你变换一个第一维的,需要变换三个二维和四个三维的。

4. 求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格的一个面)

5. c语言如何实现多维整型数组的复制

memcpy(目的地址,源地址,字节数)
由于数组元素为连续内存存放
可以使用此函数,将源地址的内存内容,复制到目的地址去,字节数为sizeof(数组名)

6. c语言多维数组指针求解 希望高手每行注释一下 谢谢

#include
"stdio.h"
void
main()
{
int
a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
//
定义一个3行4列的二维数组
printf("%d,",a);
//
输出数组a
的首地址
printf("%d,",*a);
//
同上
printf("%d,",a[0]);
//
把a[0]看成一个数组名,则a[3][4]就相当于一维数组了,所以也是首地址
printf("%d,",&a[0]);
//同上
printf("%d\n",&a[0][0]);
//
a[0][0]是值,所以&a[0][0]也是取首地址
printf("%d,",a+1);
//
第一行的首地址
printf("%d,",*(a+1));
//
同上(理由跟输出a[0]差不多)
printf("%d,",a[1]);
//
同上
printf("%d,",&a[1]);
//
同上
printf("%d\n",&a[1][0]);
//
同上
printf("%d,",a+2);
//
这些都跟a+1以下的一样的原理
printf("%d,",*(a+2));
printf("%d,",a[2]);
printf("%d,",&a[2]);
printf("%d\n",&a[2][0]);
printf("%d,",a[1]+1);
printf("%d\n",*(a+1)+1);
printf("%d,%d\n",*(a[1]+1),*(*(a+1)+1));
}

7. 关于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]);
}

8. C语言关于多维数组的问题;字幅有限;请看问题补充;谢谢了

数组的输入输出格式不是固定的,是要自己具体定义的,也就是说,既可以按行输出,也可以按列输出,也可以按对角线输出~~~等等,当然,它的确是按行存储的,由上至下先存储完第一行的所有元素,接着再存储下一行的所有元素,你举的程序例子是按行输出的,但就像楼上所说的,是无法通过编译的,因为你没有指明你要输出的数组元素,编译器是会报错的,把这个语句printf(%3d);换成printf("%3d",a[i][j]);就可以了~~~

9. C语言 多维数组课程设计

其实就是用一维数组实现的,例如 int a[m][n],可以定义一个 aa[m*n], 再用一个函数实现a[i][j]; 即aa[i*n+j]=a[i][j] ;

int m,n,a[MAX]; /*全局变量 */
void arrF(int i,int j,int x) /*赋值的函数,先假设i,j是 非负的 */
{
if(i<m && j<n) a[i*n+j]=x;
else printf("overflow!\n');
}

数组aa[]除了预设的大一点,还可以动态分配,即调用mallloc(): int *a=(int*)malloc(sizeof(int)*m*n);
( malloc函数包含再stdlib.h中).

10. c语言定义一个10维数组,并用scanf初始化,然后找到其中最小与最大的数输出

#include <stdio.h>
void main()
{
int array[10];
int i = 0;
int minPos = 0;
int maxPos = 0;
for(i = 0; i < 10; i++)
scanf("%d", &array[i]);
for (i = 1; i < 10; i++)
{
if (array[i] < array[minPos])
minPos = i;
if (array[i] > array[maxPos])
maxPos = i;
}
printf("The min value : %d\nThe max value : %d\n", array[minPos], array[maxPos]);
}