C语言,结构体中的数组怎么赋值,?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言,结构体中的数组怎么赋值,?相关的知识,希望对你有一定的参考价值。

(1)用字符常量逐个初始化数组。例如:

char a[8]='i','l','o','v','e','y','o','u';

把8个字符依次分别赋给c[0]~c[7]这8个元素。

如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。如果花括号中提供的初值个数(即字符个数)大于数组长度,则出现语法错误。

如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即'\\0')。

如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。

例如:char c[]=‘c’,‘’,‘p’,‘r’,‘o','g','r','a','m';

这时c数组的长度自动定为9。也可以定义和初始化一个二维字符数组,例如:

char diamond[5][5]='','','#','','#','','#','#','','','','#',

'','#','','#','','','#';用它代表一个菱形的平面图形。

(2)字符串常量初始化数组。例如:

char c[]=‘c’,‘’,‘p’,‘r’,‘o','g','r','a','m';

可写为:char c[]="C program";

或去掉写为:char c[]="C program";

注意:此时数组c的长度不是9,而是10。因为字符串常量的最后由系统加上一个'\\0'。上面的初始化与下面的初始化等价。

char c[]=‘c’,‘’,‘p’,‘r’,‘o','g','r','a','m','\\0';

扩展资料:

其定义的一般形式是:char数组名[数据长度]

例如:

char c[10];

c[0]='I';c[1]='';c[2]='l';c[3]='o';c[4]='v';c[5]='e';c[6]='';c[7]='y';c[8]='o';c[9]='u';

以上定义了c为字符数组,包含10个元素。

由于字符型数据是以整数形式(ASCII代码)存放的,因此也可以用整型数组来存放字符数据,例如:

int c[10];

但这时每个数组元素占2个字节的内存单元,浪费存储空间。

字符数组也可以是二维或多维数组,例如:

char c[5][10];

即为二维字符数组。

初始化

字符数组的初始化与数值型数组初始化没有本质区别。但它除了可以逐个给数组元素赋予字符外,也可以直接用字符串对其初始化。

输入输出

字符数组的输入

(1)用getchar()或scanf()的'%c'格式符对数组进行字符赋值。例如,对于数组a[10]:用getchar()赋值:

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

a<i>=getchar();

用scanf()赋值:

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

scanf("%c",&a<i>);

(2)用scanf()的'%s'格式对数组赋值。还是对于数组a[10]:

scanf("%s",a);

scanf("%s“,&a[0]);

输入”C program“并回车时,a数组会自动包含一个以”\\0“结尾的字符串”C program“。

字符数组的输出

(1)用putchar()或printf()的‘%c’格式符对数组进行字符赋值。例如,对于数组a[10]:用putchar()赋值:

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

a<i>=putchar();

用printf()赋值:

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

printf("%c",a<i>);

输出结果为:

c program

(2)用printf()的'%s'格式对数组赋值。还是对于数组a[10];

printf("%s",a);

输出结果为:

c program

参考资料:

百度百科——字符数组

参考技术A 你程序中的那种赋值方式只能在数组定义的时候赋值,定义完成后,就要一个一个的赋值。比如:s.a[0]
=
1;s.a[1]
=
2;如果赋值有一定规律的话,可以用for循环;如果赋的值一样的话,可以用
memset(s.a,0,sizeof(s.a));,memset一般用于数组初始化和清零。
参考技术B 对于已经定义好了的数组,肯定不能用这样赋值啦,给结构体赋值其实就跟其他的变量赋值一样,难道你可以
int
a[3];
a=0,1,2;
这个给一个int数组赋值吗,不行啊。
正确的做法就是像其他变量一样一个一个赋值,当然也可在结构体初始化时赋值
参考技术C 如果没记错的话只能是数组初始定义的时候才可以这样赋值。
只能一个一个赋值,s.a[0]=1;
这样是合法的
想给数组赋值的话用循环吧

C语言关于结构体变量为动态数组赋值问题

C语言关于结构体变量为动态数组赋值问题for(x=0;x<num;x++)

printf("学号:%d\n姓名:%s\n班级:%d\n",array[x].Num+M_1,array[x].Name,array[x].Banji);

不知道为什么每次输出的都是循环最后一次的结果,而不会把全部输入的数据进行输出,小白一个,求大神指教,谢谢

参考技术A boy1.name[20]="Zhang ping";此形式不对,name是数组,数组在初始化时可以写成name[20]="Zhang ping";但是定义之后在函数的执行部分中就不能这样写了,可以用字符串拷贝函数,即写成strcpy(boy1.name,"Zhang ping"); c[2]=1,2 错误,要逐个元素赋值。写成e.c[0]=1;e.c[1]=2; 或者在定义结构体变量e时初始化: struct a e=2,'f',1,2,1.23;

以上是关于C语言,结构体中的数组怎么赋值,?的主要内容,如果未能解决你的问题,请参考以下文章

c语言结构体中的一个char数组怎么赋值?

C语言中如何将结构体中的值赋给BYTE类型的缓存?

C语言,请问如何将结构体中的结构体拷贝到内存

C语言,请问如何将结构体中的结构体拷贝到内存

结构体赋值给数组

结构体中定义结构体怎么赋值