C语言中结构体中的数组,不能直接赋值吗
数组不能整体赋值,需要逐个元素赋值,但是如果这个数组是一个结构体的成员,可以通过结构体之间的直接赋值间接达到数组整体赋值的效果,即:
t1.mark=t2.mark;//非法,数组不能直接整体赋值。
t1=t2;//合法,在此之后,t2.mark数组将被整体复制到t1.mark数组。
在c语言的语法中,这样不行
如果你需要初始化
可以这样写
struct stu{ int a; int b; int c;} student = {1,2,3};
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;
}
对于已经定义好了的数组,肯定不能用这样赋值啦,给结构体赋值其实就跟其他的变量赋值一样,难道你可以
int
a[3];
a={0,1,2};
这个给一个int数组赋值吗,不行啊。
正确的做法就是像其他变量一样一个一个赋值,当然也可在结构体初始化时赋值
t2.mark=t1.mark;//mark为结构体中的数组,不能直接赋值??
是的,数组名是个静态地址值,不能被修改,如果想把数据存储到其中,可以用memcpy()函数进行内存拷贝,或采用循环进行赋值
#include
memcpy(
t2.mark,
t1.mark,
sizeof(t2.mark)
);
C语言结构体中的 . 和 -> 是什么意思
.是普通的结构体类型的变量取用结构体里的元素,->是定义了一个该结构体类型的指针变量取用结构体的元素。
C语言中怎么给一个结构体用scanf进行赋值?
结构体数组指针作为函数参数,通过数组的首地址与偏移量对结构体数组进行scanf的赋值,在函数中通过指针间接访问到其指向的内存。举例:编写函数,输入5个学号(int),5个姓名(字符串),5个成绩数组(每组三个成绩)(int[3]),依次调用函数 include <stdio.h> include <stdlib.h> struct student ...
-> 在c语言中是什么意思?
“->”是一个整体,它是用于指向结构体子数据的指针,用来取子数据。换种说法,如果我们在C语言中定义了一个结构体,然后申明一个指针指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到“->”。问题中的p=p->next,意思是将p指向的一个结构体实例中的自数据next赋值给p。
C语言 结构体数组 计算个数
include <stdio.h> include <stdlib.h> include <conio.h> typedef struct student { int num;char name[20];char sex[3];struct student *next;}LIST;LIST *CreateList(){ int i,n;LIST *head=NULL,*pre,*cur;printf("请输入学生的总个数:");scanf("%d",&n);for(i=1;i<=n;i+...
c语言中c(5,2)代表什么意思?
C(5,2)表示从5个里面取2个的分组数,即组合数,其计算方法是5×4÷(2×1)=10;“c上面2下面5(0。4)(0。6)的三次方”的含义是“在5次独立重复试验中,恰好发生2次的概率”。在C语言中定义了一个结构体,然后申明一个指针指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到...
C语言中的 :1; 是什么意思?
->是一个整体,它是用于指向结构体、C++中的class等含有子数据的指针用来取子数据。换种说法,如果我们在C语言中定义了一个结构体,然后申明一个指针指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到“->”.举个例子:struct Data { int a,b,c;}; \/*定义结构体*\/ struct Data...
C语言文件读写结构体里面的数据怎样存到磁盘文件上
1、首先打开VC++6.0。2、选择文件,新建。3、选择C++ source file 新建一个空白文档。4、首先声明头文件,#include<stdio.h>。5、主函数,定义变量main( ){ FILE *fp; int i; 需要一个结构体,struct rec{ \/*定义结构体类型*\/ char id[10];。6、主要代码if( (fp=fopen("d:\\\\in...
c语言结构体中的一个char数组怎么赋值?
把8个字符依次分别赋给c[0]~c[7]这8个元素。如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。如果花括号中提供的初值个数(即字符个数)大于数组长度,则出现语法错误。如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即'\\0')...
c语言中结构体后面的[数字]是什么意思
语法有问题吧?好像不能通过编译。struct student { int t;} a[1000];这样语法是没问题的。结构体数组。
C语言中struct结构体含有很多类型数据时如何一个scanf输入所有类型的...
for (i=0;i<10;i++)scanf("%d %c %f",&sch[i].num,&sch[i].name,&sch[i].score ); 就可以了。float score,float 型输入格式 是 %f 不是 %lf。&sch[1].name 里的 1 改用 i.注意,你的 name 只允许 1个字符。若多个字符 就会出错。如果 改为:struct student { int ...
直顷天麻: 数组不能整体赋值,需要逐个元素赋值,但是如果这个数组是一个结构体的成员,可以通过结构体之间的直接赋值间接达到数组整体赋值的效果,即:t1.mark=t2.mark;//非法,数组不能直接整体赋值. t1=t2;//合法,在此之后,t2.mark数组将被整体复制到t1.mark数组.
武城县13853018445: 如何给结构体里的数组字符串赋值? - ?
直顷天麻: C语言只有在定义字符数组的时候才能用“=”来初始化变量,其它情况下是不能直接用“=”来为字符数组赋值的,要为字符数组赋值可以用string.h头文件中的strcpy函数来完成. 例如: char a[10] = "123"; /*正确,在定义的时候初始化*/ ...
武城县13853018445: c语言中数组不是不能被直接赋值吗?为什么这个结构体可以?而且怎么输出第二个同学的名字呢? - ?
直顷天麻: 数组是不能被直接赋值,但是数组可以在声明的同时进行初始化. 可以用puts(stu[1].name);进行输出.
武城县13853018445: C语言能直接用一个数组名对数组进行赋值吗 - ?
直顷天麻: 不可以,在int a[];时已经为数组在内存中开辟了空间,就是数组a和b的地址已经定下了,在C中,数组一旦在内存中被创建是是固定不变的,直到被取消,a=b,把b的地址给a是不行的.
武城县13853018445: 数组元素赋值:数组元素为结构体,能否直接用“=”从B数组的某个元素赋值到A数组的某个元素 - ?
直顷天麻: 可以 结构体跟 int型 double型 基本类型差不多,是可以用=赋值的 ,
武城县13853018445: c语言中字符数组能否直接赋值 - ?
直顷天麻: 首先是个二维数组定义数据类型是必须的,所以char得加上数组中都是可以直接赋值的,关键注意下赋值时的格式别搞错了
武城县13853018445: c语言结构体中的一个char数组怎么赋值? - ?
直顷天麻: (1)用字符常量逐个初始化数组.例如:char a[8]={'i','l','o','v','e','y','o','u'};把8个字符依次分别赋给c[0]~c[7]这8个元素.如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的.如果花括号中提供的初值个数(即字符个数)大于数...
武城县13853018445: 如何给结构体数组中的数组赋值?C语言的 - ?
直顷天麻: #include <stdio.h>struct node {int b[8]; }a[10];int main(void) {int i, j; for(i = 0; i < 10; i++){for(j = 0; j< 8; j++){a[i].b[j] = i + j + 1;}} for(i = 0; i < 10; i++){for(j = 0; j< 8; j++){printf("a[%d].[%d] = %d\n", i, j, a[i].b[j]);}}return 0; }别忘记加分啊
武城县13853018445: C语言为什么直接给二维数组中的某个元素赋值不行,比如A[0][0]=1,A是整型数组 - ?
直顷天麻: C语言规定,普通数组没有赋初值,默认的数组元素值是随机数,不是0.如果在定义数组时,数据类型前面加上关键字static,数组变成了静态数组;或者把数组定义在函数的外面,成为全局变量数组,这时数组元素的值自动赋值为0.