c语言如何给结构体指针赋值?
发布网友
发布时间:2022-04-30 03:51
我来回答
共3个回答
热心网友
时间:2023-10-10 11:43
结构体数组指针作为函数参数,通过数组的首地址与偏移量对结构体数组进行scanf的赋值,在函数中通过指针间接访问到其指向的内存。
举例:编写函数,输入5个学号(int),5个姓名(字符串),5个成绩数组(每组三个成绩)(int[3]),依次调用函数
#include <stdio.h>
#include <stdlib.h>
struct student //建立结构体,学号,姓名,3门课的分数
{
int num;
char name[10];
int score[3];
}Stu[5]; //初始化,一共5个学生的数据
void getScore(struct student * p) //函数:向结构体读取分数,一共三门课
{
int i, j;
for (i = 0; i < 5; i++)
for (j = 0; j < 3; j++)
scanf_s("%d", (&(p+i)->score[j]));
}
void getNum(struct student * p) //函数:向结构体读取学号
{
int i;
for (i = 0; i < 5;i++)
scanf_s("%d", &(p + i)->num);
}
void getName(struct student * p) //函数:向结构体读取姓名
{
int i;
for (i = 0; i < 5; i++)
scanf("%s", &(p + i)->name);
}
int main()
{
int i, j, average[3] = { 0 }; //average数组储存每门课的平均分
getNum(Stu); //函数调用
getName(Stu);
getScore(Stu);
for (j = 0; j < 3; j++)
{
for (i = 0; i < 5; i++)
average[j] += Stu[i].score[j];
}
for (i = 0; i < 5; i++)
{
printf("num = %d name = %s Score:", Stu[i].num, Stu[i].name); //依次打印学号 姓名
//printf("%d %d %d", Stu[0].score[0],Stu[0].score[1],Stu[0].score[2]);
for (j = 0; j < 3; j++) //打印三门课的分数
printf(" %d", Stu[i].score[j]);
printf("\n");
}
printf("average:");
for (i = 0; i < 3; i++)
printf("%f ", (float)average[i]/5); //打印三门课平均分
printf("\n");
system("pause");
return 0;
}
如:
scanf("%c%c%c",&a,&b,&c);
输入为:
d e f
则把'd'赋予a, ' '(空格)赋予b,'e'赋予c。因为%c 只要求读入一个字符,后面不需要用空格作为两个字符的间隔,因此把' '作为下一个字符送给b。
只有当输入为:def(字符间无空格) 时,才能把'd'赋于a,'e'赋予b,'f'赋予c。
热心网友
时间:2023-10-10 11:44
char *chars1 = char1; 左边的chars1是char指针,右边的char1是char,类型不匹配,改一下数据类型就好了。
热心网友
时间:2023-10-10 11:44
第二行的写法很新颖,所以编译器不认识。第三行赋字符串值,可以用strcpy函数
c语言结构体函数指针怎么赋值
结构体指针就是这个指针变量的值必须指向存放该结构体的内存位置。当这个指针没有任何指向时,可以赋值为null值,但是改指针不可使用,程序中应该做判断。下面是一些赋值演示。struct student{ int id;int score;} aaa;struct student *p = null;//结构体指针p初始化赋值为null struct student *p2=&a...
C语言中怎么给一个结构体用scanf进行赋值?
结构体数组指针作为函数参数,通过数组的首地址与偏移量对结构体数组进行scanf的赋值,在函数中通过指针间接访问到其指向的内存。举例:编写函数,输入5个学号(int),5个姓名(字符串),5个成绩数组(每组三个成绩)(int[3]),依次调用函数 include <stdio.h> include <stdlib.h> struct student ...
C语言怎么给结构体里的结构体赋值?
如果 int a[][2] = { 2,2}这是正确的,但是定义数组之后再 a = { 2,2}是不正确的, 你还是一个一个赋值吧. 另外说明一下吧, 定义的时候是给变量申请内存, 编译器会把你初始话的值赋值到内存, 但是如果 以后在赋值的时候, 就成了指针了, 语法就不正确了 m1->edges= { {0,1,0,0}...
C/C++编程笔记:C语言结构体想要直接赋值,应该如何实现?
从结果可以看出,C语言中结构体的直接赋值是可行的。我们可以通过查看struct_assign()函数的汇编实现,从底层了解C语言是如何实现两个结构体之间的赋值操作的。这段汇编比较简单,由于结构体的对齐特性,sizeof(struct Foo)为16,通过四次movl操作将foo1的结构体内容拷贝到结构体foo2中。从汇编上可以看出...
c语言函数能不能返回结构体
c语言函数可以返回结构体,操作方法如下:1、首先在电脑中打开visual studio新建项目,给这个结构体取个名字叫student。2、然后添加变量,如下图所示。3、然后给结构体类型指针p申请堆空间,如下图所示。4、接着使用for循环给结构体赋值,如下图所示。5、最后在通过for循环打印输出,这样就完成就结构体...
c语言结构体里的一个元素如何赋值
如果弄的是结构数组,那就给学好设置为负数表示无效记录就可以了啊,循环的时候加上一个判断,如果是链表或者树,可以直接删除的,呵呵,不知道问的是不是这个意思 array[ i ].data = xxx;这样可以吗?array[ i ]需要改变的结构 array[ i ].data 该结构的元素 xxx新的值 不知道是不是这个意思,呵呵,...
C语言结构体数组的定义和赋值
intmain(void){ structstudentsbao={};printf("%d,%s\n",bao.id,bao.name);//输出是4224528,空(应该是null)//structstudentsbao={3,"123"};可以。第一种赋值方法 //strcpy(bao.name,"bao");//可以,//printf("%d,%s\n",bao.id,bao.name);//bao.name="bao";错误“stray'\351'in...
在C语言中,一个结构体数组,成员的指针函数。怎样对这个指针赋值?
定义一个函数:void f(void *d){ } {ReadData,0,0,f}。
请教C语言问题,关于通过函数给结构体成员赋值
不知道你这又是哪位学艺不精的C语言大师编的书,别的不说,那个自定义函数getdata就不规范,居然定义的时候不说明返回值类型,这水平也真敢出书。从main函数开始读,先定义一个结构体变量a,然后调用getdata函数,其参数是一个类型为指针类型的结构体变量,功能为读入形参结构体变量的s和t变量,把a的...
C语言如何为结构体中的某个属性赋值
C语言中,数组间不能相互赋值——这是历史遗留问题,当年在B语言中,数组名和指针名是没有区别的(除了数组名定义时自动为数组分配内存),数组名可以指向别的对象或数组。换句话说,数组名之间的赋值是浅赋值。后来C语言的设计者发现这种规则在C语言行不通,但是C语言的设计者又不想破坏对B语言的兼容...