C语言结构体数组的定义和赋值 C语言结构体数组的定义和赋值

作者&投稿:运裴 (若有异议请与网页底部的电邮联系)

intmain(void){

structstudentsbao={};

printf("%d,%s
",bao.id,bao.name);//输出是4224528,空(应该是null)

//structstudentsbao={3,"123"};可以。第一种赋值方法

//strcpy(bao.name,"bao");//可以,

//printf("%d,%s
",bao.id,bao.name);

//bao.name="bao";错误“stray'\351'inprogram”其他是乱码,

//bao.name[0]='a';

//bao.name[0]='/0';

//printf("%d,%s
",bao.id,bao.name);

/*这样可以,*/

//chararr[10]="baobao";

////bao.name=arr;//error"assignmenttoexpressionwitharraytype"

//scanf("%s",bao.name);//可以,

//printf("%d,%s
",bao.id,bao.name);

//所以scanf那一类函数都可以。

//还有就是memcpy函数也是可以的

return0;

}

扩展资料

C语言结构体数组的直接赋值及数组的长度计算:

#include<stdio.h>

//自定义一个字符串的结构体,包含字符串和字符串长度两个变量

typedefstructStr{

charch[100];

intlength;//char数组(字符串)的长度

}myStr;

//刚开始声明变量时每个变量的字符串长度length都为0

//这里以长度为10的数组为例,数组长度是1000

//对第0个到第9个结构体数组的长度同时赋值为0

myStrmyStr1[10]={

[0...9]={

.length=0,

}

};

intmain(){

inti;

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

printf("%d
",myStr1[i].length);

}

return0;

}



C99标准出来以前,C语言不支持动态定义数组大小,只能采用动态分配指针方式来完成动态数组的个数定义。如:
struct
st
{
int
x,y;
char
str[10];
};
struct
st
*array
;
int
n;
printf("input
n:
");
scanf("%d",
&n);
array=(struct
st*)malloc(n*sizeof(struct
st));
//动态分配n个结构体空间,接下来array的操作,与数组操作是相同的,如:array[0].x=1
;
C99以后,C语言标准开始支持动态定义数组,但动态数组,在其确定个数之后,在其生命期中,就不可变了。如:
struct
st
{
int
x,y;
char
str[10];
};
int
n;
printf("input
n:
");
scanf("%d",
&n);
struct
st
array[n]
;
//定义动态数组
array[0].x=1
;

BookInformation
*p=
new
BookInformation("家春秋","巴金","小说","人民文学出版社","23272989",3);
book[0]=
*p;
//前提
你有有参数构造函数

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

(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=getchar();
用scanf()赋值:
for(i=0;i<10;i++)
scanf("%c",&a);
(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=putchar();
用printf()赋值:
for(i=0;i<10;i++)
printf("%c",a);
输出结果为:
c program
(2)用printf()的'%s'格式对数组赋值。还是对于数组a[10];
printf("%s",a);
输出结果为:
c program
参考资料:
百度百科——字符数组

C99标准出来以前,C语言不支持动态定义数组大小,只能采用动态分配指针方式来完成动态数组的个数定义。如:
struct st {
int x,y;
char str[10];
};
struct st *array ;
int n;
printf("input n: "); scanf("%d", &n);
array=(struct st*)malloc(n*sizeof(struct st)); //动态分配n个结构体空间,接下来array的操作,与数组操作是相同的,如:array[0].x=1 ;
C99以后,C语言标准开始支持动态定义数组,但动态数组,在其确定个数之后,在其生命期中,就不可变了。如:

struct st {
int x,y;
char str[10];
};
int n;
printf("input n: "); scanf("%d", &n);
struct st array[n] ; //定义动态数组
array[0].x=1 ;

结构体二维数组的赋值与定义
答:只有数组才能用a[i][j]形式访问数组变量,指针可以说是一个特殊的变量(存储所指向内存的地址),是一维的,所以不能用二维数组形式访问。指针如果想要访问二维数组中i行j列元素应该用*(p+i*nCol+j)或是p[p+i*nCol+j]形式,其中nCol是二维数组中列数 ...

定义一个结构体数组,可以在初始化里直接赋值吗?比如 struct a{ int d...
答:a{ int d=0; //这样写是错误的,在运行时会出现程序异常 }b[10];结构体定义是进行一种数据描述,不具备实例化的情况。只有在有具体的数据变量(实例,在C++k中也称对象)时,才可以对数据进行初始化。正确的写法为:struct a{ int d;}b[10]={0}; //对具体的变量b数组进地元素初始化 ...

C语言中怎么给数组赋初值
答:数组赋值可以通过以下几种方法:1、定义的时候直接赋初值(用{});2、用循环语句依次给数组各元素赋值;3、将数组放在一个结构体里面,通过结构体的引用给数组整体赋值;(数组本身不能直接整体赋值)

C语言结构体Struct怎么使用?
答:其成员变量的定义可以随声明进行: struct stuff Huqinwei = {"manager",30,185};也可以考虑结构体之间的赋值:struct stuff faker = Huqinwei;//或 struct stuff faker2;// faker2 = faker;打印,可见结构体的每一个成员变量一模一样 如果不使用上边两种方法,那么成员数组的操作会稍微麻烦(用for...

请问结构体数组赋值的方法?具体看下面
答:我来分析一下,struct save_account//保存登录帐户密码 { char account[10];char password[10];}users[10] = {0};这个我理解是定义了一个结构数组users[10], 并初始化为0.也就是说user[]数组有10个元素,每个元素是上面的这样一个结构.下面来看strcpy这个函数,是标准c库函数, 原型是 char * ...

C语言结构体定义
答:结构体的定义如下所示,struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。在一般情况下,tag、member-list、variable-list这3部分至少要出现2个。结构体的成员可以包含其他结构体,也可以包含指向自己结构体类型的指针,而...

结构体赋值给数组
答:c语言只有在定义字符数组的时候才能用“=”来初始化变量,其它情况下是不能直接用“=”来为字符数组赋值的,要为字符数组赋值可以用string.h头文件中的strcpy函数来完成。例如:char a[10]= "123";/*正确,在定义的时候初始化*/ char a[10];a = "123";/*错误,不能用“=”直接为字符数组...

C语言结构体定义
答:C语言结构体定义:struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。结构体是C语言中聚合数据类型(aggregatedatatype)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的...

C语言中怎么给一个结构体用scanf进行赋值?
答:结构体数组指针作为函数参数,通过数组的首地址与偏移量对结构体数组进行scanf的赋值,在函数中通过指针间接访问到其指向的内存。举例:编写函数,输入5个学号(int),5个姓名(字符串),5个成绩数组(每组三个成绩)(int[3]),依次调用函数 include <stdio.h> include <stdlib.h> struct student ...

C语言中结构体中的数组,不能直接赋值吗
答:数组不能整体赋值,需要逐个元素赋值,但是如果这个数组是一个结构体的成员,可以通过结构体之间的直接赋值间接达到数组整体赋值的效果,即:t1.mark=t2.mark;//非法,数组不能直接整体赋值。t1=t2;//合法,在此之后,t2.mark数组将被整体复制到t1.mark数组。