c语言三维数组赋值给二维数组为什么可以这样

2020-11-25 14:27:44 字数 6124 阅读 7218

1楼:

你的数组a其实仍然是二维数组,因为你给的值显然是一个二维数组的值即1,2,3

3,2,1

2,5,6

你并没有真正做一个三维数组,所以赋给二维数组完全没问题,数组b的值仍然是像上面那样的形式

c语言怎么为一个三维数组赋值?我的这个二维数组是字符串,要求用c语言,不是c++

2楼:匿名用户

ch[i][j][k]='a'; //用这样的形式可以给三维数组的某个元素赋值

strcpy(char[i][j], "abc" ); //三维字符数组,给某个字符串赋值

3楼:蔚海韵

你说的是用循环吗,,多维的分开循环不就是单维的了吗,,这样你改懂了吧,,具体的我就不太清了,c语言是两年前学得了

4楼:匿名用户

你是要用二维字符给三维数组赋值???

5楼:匿名用户

问题意识看不懂。。。

6楼:游萱斐水

啥子意思哦,没有看懂哦。

明明说的是三维数组,怎么有变成了二维数组。

是不是你

把“三维”打错了,打成“二维”了。

#include

"stdio.h"

void

main()

c语言多维数组的赋值

7楼:匿名用户

一、高维数组

有时,数组的维数并不止一维,例如一个记录消费中心在第一季度里各个月的收入数据就可以用二维数组来表示。定义二维数组的方法是在一维数组定义的后面再加上一个用方括号括起来的维数说明。例如:

float array[3][8];

实际上,这个数组可以看成3个连续的一维数组,每个一维数组具有8个元素。该数组在内存中的存储格式为最左边的维数相同的元素连续存储,也即按行存储的。首先存储第一行8个元素,其次是第二行,最后是第三行。

main()

;int i,j;

for(i=0;i<3;i++)

}它的输出结果为:

1 2 3

4 5 6

7 8 9

可以看出,二维数组元素是按行存储的。

我们也可以对数组进行赋值,而不是初始化。

main()

}当输入1 2 3 4 5 6 7 8 9《回车》

输出为:

1 4 7

2 5 8

3 6 9

数组可以是二维、三维甚至是更高维数的,虽然c语言对维数的处理没有上限,但是处理高维数组是很头疼的事。一般尽量避免处理四维和四维以上的数组。下面看一个三维数组的例子:

main()

这个三维数组可以看成2个二维数组,每个二维数组又可以看成3个一维数组。可以在头脑里想象成两个平行平面,每个平面内有3*4个点。所以共有24个元素。

二、字符串数组

上面讲的都是存放数值的,有一类数组,用来处理字符串的,我们叫字符串数组。其实字符串数组也是二维数组,只是它的特殊性,才单独拿出来说的。

main()

先看它的输入特性,前面在说输入语句的时候说过,遇到字符串输入,可以不加'&',现在只要记住这个特性就可以,以后说指针的时候再讲为什么。但是这儿为什么用s[i],可能很多人不太明白。我们定义的是二维数组,而输入的时候,却使用一维数组的形式。

这是因为字符串在内存里地址可以用它的名字表示,就好象这种形式:

main()

定义的是一维数组,输入语句用变量形式表示一样。通过前面的'%s'形式可以看出,s[i]是一个数组,所以s就是二维数组了。

这里要注意一点,scanf()函数在输入字符串时候不能支持空格,看下面的例子:

main()

我们输入:1111

2222 3333

4444

我们是想把1111赋值给s[0],2222 3333赋值给s[1],4444赋值给s[2]。可实际上编译器是这样做的,把1111赋值给s[0],把2222赋值给[1],把3333赋值给s[2]。

实际输出:1111

2222

3333

在输入字符串的时候,如果使用scanf(),就把空格当作下一个输入了。那么我们怎么解决这个问题呢?毕竟很多情况下,一行字符串肯定有空格出现的。

我们使用新的函数gets()。这个函数是专门接受字符串输入的,它跳过了空格的影响。把上面的输入语言修改为gets(s[i])即可。

我们定义了char s[3][10],超过10个字符肯定不行,如果少于10个字符,电脑怎么处理呢?电脑是在每个字符串的后面自动补上'\0',作为字符串的结束标志。

我们经常在填写一些可选择的内容时经常发现,待选的字符串都是按字母排列好的,我们怎么用c语言实现这个功能?在c语言里,字符串的排序是按照字符的ascii码来的,如果第一个字符一样,则比较第二个,依次类推。

main()

else if(s1[i]>s2[i])

else ;

}if(s1[i]=='\0' && s2[i]!='\0') printf(s1 else if(s2[i]=='\0' && s1[i]!='\0') printf(s1>s2\n);

else printf(s1==s2\n);

}上面的例子就是比较两个字符串大小的,先比较第一个,如果相同,接着比较第二个,如果不相同,则分出大小。一直往后比较,直到其中某一个到'\0',你也可以先用strlen()函数找出最小的长度。

exit()函数的作用是退出程序,具体它的用法可以看看相关资料。

其实c语言把我们经常需要的字符串处理函数都做好了,我们只需要调用它即可。如strcmp()用来比较、strcpy()用来拷贝等等。看看它们的用法:

#include string.h

main()

可以看出,比较大小时,如果k<0,则s10,则s1>s2;如果k=0,则s1=s2。实际上这是一个函数,具体什么是函数,以及为什么写成那种形式,我们下节再说。这些函数都包含在string.

h头文件中,所以在程序的开头,都要写上#include string.h。

字符串处理有很多函数,你们可以看看相关的书,也可以看看turbo c的帮助。

8楼:无尘v浪子

循环,或者定义的时候赋值~

c语言中给二维数组赋值的问题。。。。

9楼:匿名用户

int *array[50];

int i=0;

for( i=0; i<50; i++ )array[i] = 每个一维数组名;

如果你能用for循环打印出来各个一维数组,这种做法还是可以的最好把你源程序贴上来给大家看看~~

一二维数组之间的关系你再好好研究一下~~每本语言书上都会有详解加油~~~~~

10楼:空么

将一维数组的地址赋给二维数组就ok.

e.g a[i]=bi (a[i]为二维数组的第i行的地址,bi为第i个一维数组的地址)

c语言对二维数组进行赋值

11楼:匿名用户

你的意思是你要分别记录玩家1 和 玩家2 的所有的走棋的坐标吗?如果是的话, 可以分别用两个指针数组来表示,不需要用到二维数组。如果是记录整张棋盘的信息, 可以用二维数组。

c语言二维数组赋值问题

12楼:匿名用户

声明的时候赋值是对整个数组的赋值,这是编译器特性

而声明以后再对a[5][3]赋值实际就是在对第六行第四列的单个元素进行赋值,先不说这个越界,对单个元素进行数组数据的赋值本身就是一个错误

所以,如果你要在声明以后再赋值的话,那么必须一个元素一个元素的赋值

13楼:匿名用户

首先,除非在变量声明时,a[5][3]是指明数组名为a,大小为5x3,此时可以初始化,给数组整体赋值;

在程序中,单独使用a[5][3]是指数组a中一元素,但因数组a大小为5x3,所以下标最大元素为a[4][2],因此编译报错;

希望上述对您有帮助。

14楼:匿名用户

a[5][3]= 其实就是在给最后一个赋值

并不是数组的初始地址

15楼:匿名用户

数组不能被直接这样赋值的,初始化可以,赋值只能通过指针或者单个元素赋值。

c语言、三维数组

16楼:bc警长

先说二维,可以这么理解:

int n[3]有3个int

那么,int m[5][3]有5个int[3]赋值时:

n[1]=3把3给1号

m[4]=m[4]是个int[3]类型,这么赋值,也就是这么赋值:

m[4]的[0]是5:m[4][0]=5

m[4][1]=9

m[4][2]=4

懂了吗?三维甚至更多维大同小异,比如

int k[4][5][3]有4个int[5][3]这个概念应该不难理解的,就是各种类型,不停的加下标,加下标,加下标,下标,标……

曾写过一个模拟7段码(看看红绿灯上的倒计时是怎么显示的),共有2行显示,每行10个数字,每个数字7段,整个系统状态就是用一个bool[2][10][7]确定的

17楼:梦中梦

在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]

总结的说,就是“维数最高优先存储”

至于什么情况用三维数组,这要看你编程思想了,当你想编的程序抽象成三维的东西,就用三维数组来表示,就如矩阵似的,我们把矩阵看成是一个图,二维的,所以用了二维数组

希望可以帮助你

18楼:匿名用户

三维数组和二维数组一维数组一样啊,使用的时候用3个下标,下标的起点也是0

初始化也就是二维数组的推广,因为是行序优先存放,所以没有完全初始化的后面的元素自动赋初值0

如果有三个控制量就用三维数组啊,比方是三维空间xyz

19楼:燕晓

这个得需要计算机专业知识才行。

c语言为什么直接给二维数组中的某个元素赋值不行,比如a[0][0]=1,a是整型数组

20楼:

c语言规定,普通数组没有赋初值,默认的数组元素值是随机数,不是0。如果在定义数组时,数据类型前面加上关键字static,数组变成了静态数组;或者把数组定义在函数的外面,成为全局变量数组,这时数组元素的值自动赋值为0。

c语言的多维数组怎么嵌套定义,以及怎么赋值?

21楼:匿名用户

1、使用malloc函数,先分配第一维的

大小,然后再循环分配每一维的大小。

2、例程,分配3行4列二维数组:

#include

#include

intmain()

//初始化

for(i=0;i<3;++i)}//输出测试

for(i=0;i<3;++i)printf("\n");

}//释放动态开辟的空间

for(i=0;i<3;++i)free(a);

return0;}/*

输出:0123

1234

2345*/

22楼:月殒星堕

如果按照楼主的**写的意思,那就只能是申请字符指针数组。

也就是说:

char ch1=;

char* ch2=; //这里表示ch2是字符指针char* ch3=; //这里表示ch3是字符指针

在之后的操作里面要注意取内容。

其实申请多维数组完全可以直接写

char ch = ,};

同理初始化三维的数组;